Form helper class. Unless otherwise noted, all generated HTML will be made safe using the HTML::chars method. This prevents against simple XSS attacks that could otherwise be triggered by inserting HTML characters into form fields.
Class declared in SYSPATH/classes/Form.php on line 3.
Creates a button form input. Note that the body of a button is NOT escaped, to allow images and other HTML to be used.
echo
Form::button(
'save'
,
'Save Profile'
, [
'type'
=>
'submit'
]);
string
$name
required - Input name string
$body
required - Input value array
$attributes
= NULL - Html attributes string
public
static
function
button(
$name
,
$body
,
array
$attributes
= null)
{
// Set the input name
$attributes
[
'name'
] =
$name
;
return
'<button'
. HTML::attributes(
$attributes
) .
'>'
.
$body
.
'</button>'
;
}
Creates a checkbox form input.
echo
Form::checkbox(
'remember_me'
, 1, (bool)
$remember
);
string
$name
required - Input name string
$value
= NULL - Input value boolean
$checked
= bool FALSE - Checked status array
$attributes
= NULL - Html attributes string
public
static
function
checkbox(
$name
,
$value
= null,
$checked
= false,
array
$attributes
= null)
{
$attributes
[
'type'
] =
'checkbox'
;
if
(
$checked
=== true) {
// Make the checkbox active
$attributes
[] =
'checked'
;
}
return
Form::input(
$name
,
$value
,
$attributes
);
}
Creates the closing form tag.
echo
Form::close();
string
public
static
function
close()
{
return
'</form>'
;
}
Creates a file upload form input. No input value can be specified.
echo
Form::file(
'image'
);
string
$name
required - Input name array
$attributes
= NULL - Html attributes string
public
static
function
file(
$name
,
array
$attributes
= null)
{
$attributes
[
'type'
] =
'file'
;
return
Form::input(
$name
, null,
$attributes
);
}
Creates a hidden form input.
echo
Form::hidden(
'csrf'
,
$token
);
string
$name
required - Input name string
$value
= NULL - Input value array
$attributes
= NULL - Html attributes string
public
static
function
hidden(
$name
,
$value
= null,
array
$attributes
= null)
{
$attributes
[
'type'
] =
'hidden'
;
return
Form::input(
$name
,
$value
,
$attributes
);
}
Creates a image form input.
echo
Form::image(null, null, [
'src'
=>
'media/img/login.png'
]);
string
$name
required - Input name string
$value
required - Input value array
$attributes
= NULL - Html attributes boolean
$index
= bool FALSE - Add index file to URL? string
public
static
function
image(
$name
,
$value
,
array
$attributes
= null,
$index
= false)
{
if
(!
empty
(
$attributes
[
'src'
])) {
if
(
strpos
(
$attributes
[
'src'
],
'://'
) === false) {
// Add the base URL
$attributes
[
'src'
] = URL::base(
$index
) .
$attributes
[
'src'
];
}
}
$attributes
[
'type'
] =
'image'
;
return
Form::input(
$name
,
$value
,
$attributes
);
}
Creates a form input. If no type is specified, a "text" type input will be returned.
echo
Form::input(
'username'
,
$username
);
string
$name
required - Input name string
$value
= NULL - Input value array
$attributes
= NULL - Html attributes string
public
static
function
input(
$name
,
$value
= null,
array
$attributes
= null)
{
// Set the input name
$attributes
[
'name'
] =
$name
;
// Set the input value
$attributes
[
'value'
] =
$value
;
if
(!isset(
$attributes
[
'type'
])) {
// Default type is text
$attributes
[
'type'
] =
'text'
;
}
return
'<input'
. HTML::attributes(
$attributes
) .
' />'
;
}
Creates a form label. Label text is not automatically translated.
echo
Form::label(
'username'
,
'Username'
);
string
$input
required - Target input string
$text
= NULL - Label text array
$attributes
= NULL - Html attributes string
public
static
function
label(
$input
,
$text
= null,
array
$attributes
= null)
{
if
(
$text
=== null) {
// Use the input name as the text
$text
= ucwords(preg_replace(
'/[\W_]+/'
,
' '
,
$input
));
}
// Set the label target
$attributes
[
'for'
] =
$input
;
return
'<label'
. HTML::attributes(
$attributes
) .
'>'
.
$text
.
'</label>'
;
}
Generates an opening HTML form tag.
// Form will submit back to the current page using POST
echo
Form::open();
// Form will submit to 'search' using GET
echo
Form::open(
'search'
, [
'method'
=>
'get'
]);
// When "file" inputs are present, you must include the "enctype"
echo
Form::open(null, [
'enctype'
=>
'multipart/form-data'
]);
mixed
$action
= NULL - Form action, defaults to the current request URI, or [Request] class to use array
$attributes
= NULL - Html attributes string
public
static
function
open(
$action
= null,
array
$attributes
= null)
{
if
(
$action
instanceof
Request) {
// Use the current URI
$action
=
$action
->uri();
}
if
(!
$action
) {
// Allow empty form actions (submits back to the current url).
$action
=
''
;
}
elseif
(
strpos
(
$action
,
'://'
) === false) {
// Make the URI absolute
$action
= URL::site(
$action
);
}
// Add the form action to the attributes
$attributes
[
'action'
] =
$action
;
// Only accept the default character set
$attributes
[
'accept-charset'
] = Kohana::
$charset
;
if
(!isset(
$attributes
[
'method'
])) {
// Use POST method
$attributes
[
'method'
] =
'post'
;
}
return
'<form'
. HTML::attributes(
$attributes
) .
'>'
;
}
Creates a password form input.
echo
Form::password(
'password'
);
string
$name
required - Input name string
$value
= NULL - Input value array
$attributes
= NULL - Html attributes string
public
static
function
password(
$name
,
$value
= null,
array
$attributes
= null)
{
$attributes
[
'type'
] =
'password'
;
return
Form::input(
$name
,
$value
,
$attributes
);
}
Creates a radio form input.
echo
Form::radio(
'like_cats'
, 1,
$cats
);
echo
Form::radio(
'like_cats'
, 0, !
$cats
);
string
$name
required - Input name string
$value
= NULL - Input value boolean
$checked
= bool FALSE - Checked status array
$attributes
= NULL - Html attributes string
public
static
function
radio(
$name
,
$value
= null,
$checked
= false,
array
$attributes
= null)
{
$attributes
[
'type'
] =
'radio'
;
if
(
$checked
=== true) {
// Make the radio active
$attributes
[] =
'checked'
;
}
return
Form::input(
$name
,
$value
,
$attributes
);
}
Creates a select form input.
echo
Form::select(
'country'
,
$countries
,
$country
);
Support for multiple selected options was added in v3.0.7.
string
$name
required - Input name array
$options
= NULL - Available options mixed
$selected
= NULL - Selected option string, or an array of selected options array
$attributes
= NULL - Html attributes string
public
static
function
select(
$name
,
array
$options
= null,
$selected
= null,
array
$attributes
= null)
{
// Set the input name
$attributes
[
'name'
] =
$name
;
if
(
is_array
(
$selected
)) {
// This is a multi-select, god save us!
$attributes
[] =
'multiple'
;
}
if
(!
is_array
(
$selected
)) {
if
(
$selected
=== null) {
// Use an empty array
$selected
= [];
}
else
{
// Convert the selected options to an array
$selected
= [(string)
$selected
];
}
}
if
(
empty
(
$options
)) {
// There are no options
$options
=
''
;
}
else
{
foreach
(
$options
as
$value
=>
$name
) {
if
(
is_array
(
$name
)) {
// Create a new optgroup
$group
= [
'label'
=>
$value
];
// Create a new list of options
$_options
= [];
foreach
(
$name
as
$_value
=>
$_name
) {
// Force value to be string
$_value
= (string)
$_value
;
// Create a new attribute set for this option
$option
= [
'value'
=>
$_value
];
if
(in_array(
$_value
,
$selected
)) {
// This option is selected
$option
[] =
'selected'
;
}
// Change the option to the HTML string
$_options
[] =
'<option'
. HTML::attributes(
$option
) .
'>'
. HTML::chars(
$_name
, false) .
'</option>'
;
}
// Compile the options into a string
$_options
=
"\n"
. implode(
"\n"
,
$_options
) .
"\n"
;
$options
[
$value
] =
'<optgroup'
. HTML::attributes(
$group
) .
'>'
.
$_options
.
'</optgroup>'
;
}
else
{
// Force value to be string
$value
= (string)
$value
;
// Create a new attribute set for this option
$option
= [
'value'
=>
$value
];
if
(in_array(
$value
,
$selected
)) {
// This option is selected
$option
[] =
'selected'
;
}
// Change the option to the HTML string
$options
[
$value
] =
'<option'
. HTML::attributes(
$option
) .
'>'
. HTML::chars(
$name
, false) .
'</option>'
;
}
}
// Compile the options into a single string
$options
=
"\n"
. implode(
"\n"
,
$options
) .
"\n"
;
}
return
'<select'
. HTML::attributes(
$attributes
) .
'>'
.
$options
.
'</select>'
;
}
Creates a submit form input.
echo
Form::submit(null,
'Login'
);
string
$name
required - Input name string
$value
required - Input value array
$attributes
= NULL - Html attributes string
public
static
function
submit(
$name
,
$value
,
array
$attributes
= null)
{
$attributes
[
'type'
] =
'submit'
;
return
Form::input(
$name
,
$value
,
$attributes
);
}
Creates a textarea form input.
echo
Form::textarea(
'about'
,
$about
);
string
$name
required - Textarea name string
$body
= string(0) "" - Textarea body array
$attributes
= NULL - Html attributes boolean
$double_encode
= bool TRUE - Encode existing HTML characters string
public
static
function
textarea(
$name
,
$body
=
''
,
array
$attributes
= null,
$double_encode
= true)
{
// Set the input name
$attributes
[
'name'
] =
$name
;
// Add default rows and cols attributes (required)
$attributes
+= [
'rows'
=> 10,
'cols'
=> 50];
return
'<textarea'
. HTML::attributes(
$attributes
) .
'>'
. HTML::chars(
$body
,
$double_encode
) .
'</textarea>'
;
}