FuelPHP provides three classes, Form Fieldset,, and Input,, to perform Form programming.
Form class provides an option to create all HTML forms elements.
Fieldset class provides an option to create html element through higher level methods, integrating the models and validation.
Input class provides an option to parse the data submitted through html forms as well as http parameters, server variables, and user agents.
In this chapter, let us learn Form programming in FuelPHP.
As discussed earlier, Form class provides methods to create html form elements and the important methods are as follows −
open() is used to create a new form. It provides the following two parameters −
$attributes − attributes of form tag as array or just the action URL as string.
$hidden − array of hidden field name and their values.
echo Form::open('/employee/add'); echo Form::open(array('action' => '/employee/add', 'method' => 'post'));
close() simply closes the form.
echo Form::close();
input() creates html input element. It has the following three parameters,
$field − name of the input element
$value − value of the input element
$attributes − attributes of input element as array
echo Form::input('name', 'jon', array('style' => 'border: 20px;'));
label creates html label element. It has the following three parameters,
$label − label to show
$id − associated form element id
$attributes − attributes of label element as array
echo Form::label('Employee Name', 'employee_name');
hidden is similar to input method, except it sets the type of the input element to hidden.
password is similar to input method, except it sets the type of the input element to password.
radio is similar to input method, except it sets the type of the input element to radio. It has the following four parameters,
$field − name of the input element
$value − value of the input element
$checked − whether the item is checked or not (true / false)
$attributes − attributes of input element as array
echo Form::label('Male', 'gender'); echo Form::radio('gender', 'Male', true); echo Form::label('Female', 'gender'); echo Form::radio('gender', 'Female');
checkbox is similar to input method, except it sets the type of the input element to checkbox. It has the following four parameters,
$field − name of the input element
$value − value of the input element
$checked − whether the item is checked or not (true / false)
$attributes − attributes of input element as array
echo Form::label('Male', 'gender'); echo Form::checkbox('gender', 'Male', true); echo Form::label('Female', 'gender'); echo Form::checkbox('gender', 'Female');
file is similar to input method, except it sets the type of the input element to file.
textarea creates html textarea element. It has the following three parameters,
$field − name of the textarea element
$value − value of the textarea element
$attributes − attributes of textarea element as array
echo Form::textarea ('description', 'original data (value)', array ('rows' => 6, 'cols' => 8));
select creates an HTML select element. It has the following four parameters −
$field − name of the select element
$values − initial selection values
$options − options as array. Options may be grouped using nested array
$attributes − attributes of input element as array
echo Form::select ( 'country', 'none', array ( 'none' => 'None', 'asia' => array ( 'in' > 'India', 'cn' => 'China' ), 'us' => 'United States' ) );
submit is similar to input method, except it sets the type of the input element to submit.
button creates html button element. It has the following three parameters,
$field − name of the button element
$value − value of the button element
$attributes − attributes of button element as array
echo Form::button('emp_submit', 'Submit');
reset is similar to input method, except it sets the type of the input element to reset.
fieldset_open creates html field set and legend elements. It has the following two parameters −
attributes − attributes of fieldset element as array
legend − name of the legend to create
// returns <fieldset class = "example-class" id = "example-id"> <legend> Custom Legend </legend> echo Form::fieldset_open (array ( 'class' => 'example-class', 'id' => 'exampleid', 'legend' => 'Custom Legend' ));
fieldset_close creates the HTML field set close tag.
// returns </fieldset> echo Form::fieldset_close();
Input class provides methods to read all request data along with form details. Some of the important methods are as follows −
uri returns the current URI of the request
// request: http://localhost:8080/employee/welcome echo Input::uri(); // return /employee/welcome
method returns the HTTP method used in the request
echo Input::method() // "POST"
get enables to read $_GET variables. It has the following two parameters,
$index − index of the $_GET array
$default − default value, if index is not found.
echo Input::get('age', '20'); // returns $_GET['age']
post enables to read $_POST variables. It has the following two parameters,
$index − index of the $_POST array
$default − default value, if index is not found
echo Input::get('age', '20'); // returns $_POST['age']
param enables to fetch item from either $_GET, $_POST, $_PUT, or $_DELETE variables. It has the following two parameters,
$index − index of the array
$default − default value, if index is not found
If no parameter is specified, it will return all items.
echo Input::param('age', '20'); // returns $_POST['age']
file enables to read $_FILE variables. It has the following two parameters,
$index − index of the $_POST array
$default − default value, if index is not found
echo Input::file();
is_ajax returns true, if the request is made through AJAX.
echo Input::is_ajax() // return false
protocol returns the HTTP protocol used in the request.
echo Input::protocol() // returns "HTTP"
ip returns the IP address through which the request is made.
echo Input::ip() // returns "84.45.34.24" (Public IP Address)
real_ip tries to return the real IP address (if the client is behind proxy) through which the request is made.
echo Input::real_ip() // returns "10.76.12.1" (local private IP Address)
server enables to read $_SERVER variables. It has the following two parameters,
$index − index of the $_POST array
$default − default value, if index is not found.
echo Input::server('HTTP_HOST'); // returns localhost:8080
referrer returns the referrer from $_SERVER variable. It is a shortcut method to get the http referrer of the current request.
user_agent returns the user agent from $_SERVER variable. It is a shortcut method to get the http user agent of the current request.
query_string returns the query string from $_SERVER variable. It is a shortcut method to get the query string of the current request.
headers return the specific or all headers. It has the following two parameters −
$index − name of the HTTP headers
$default − default value, if index is not found.
echo Input::headers('Content-Type'); // returns "text/html"
extension returns the URI extension of the current request.
// Example URL: http://localhost/test/ echo Input::extension(); // NULL // Example URL: http://localhost/test.html echo Input::extension(); // 'html'
Let’s create a simple form to add new employee using Form and Input class.
Create new action, get_add in the employee controller as follows.
public function get_add() { return Response::forge(View::forge('employee/add')); }
Now, add view for the action, fuel/app/views/employee/add.php as follows.
<!DOCTYPE html> <html lang = "en"> <head> <title>Employee :: add page</title> <meta charset = "utf-8"> <meta name = "viewport" content = "width = device-width, initial-scale = 1"> <?php echo Asset::css('bootstrap.css'); ?> </head> <body> <div class = "container"> <?php echo Form::open(array('action' => 'employee/add', 'method' => 'post')); ?> <div class = "form-group"> <?php echo Form::label('Employee name:', 'name'); echo Form::input('name', '', array('class' => 'form-control')); ?> </div> <div class = "form-group"> <?php echo Form::label('Employee age:', 'age'); echo Form::input('age', '', array('class' => 'form-control')); ?> </div> <?php echo Form::button('frmbutton', 'Submit', array( 'class' => 'btn btn-default')); ?> <?php echo Form::close(); ?> </div> </body> </html>
Here, we have used bootstrap to design the form. FuelPHP provides full support for bootstrap components. Now, requesting the page, http://localhost:8080/employee/add will show the following form.
Create new action, post_add to process the form and add the employee data entered by the user into the database in the employee controller as follows.
public function post_add() { $name = Input::post('name'); $age = Input::post('age'); $model = new model_employee(); $model->name = $name; $model->age = $age; $model->save(); Response::redirect('employee/list'); }
Here, we have been redirected to employee list page, once the user entered data is saved into the database. Next, we will create the employee list page.
Create new action, action_list to list the employee in the database as follows.
public function action_list() { $data = array(); $data['emps'] = model_employee::find('all'); return Response::forge(view::forge('employee/list', $data)); }
Create new view, fuel/app/views/employee/list for the above action as follows.
<ul> <?php foreach($emps as $emp) { ?> <li><?php echo $emp['name']; ?></li> <?php } ?> </ul>
Now, request the URL, http://localhost:8080/employee/add, enter some employee data as shown in the following screenshot and submit the form.
Then, it shows all the employees (including newly added one) available in the database as follows −