表格编程(Form Programming)
FuelPHP提供三个类, Form Fieldset Fieldset和Input ,以执行Form编程。
Form类提供了创建所有HTML表单元素的选项。
Fieldset类提供了一个通过更高级别方法创建html元素的选项,集成了模型和验证。
Input类提供了一个选项,用于解析通过html表单提交的数据以及http参数,服务器变量和用户代理。
在本章中,让我们学习FuelPHP中的Form programming 。
Form
如前所述,Form类提供了创建html表单元素的方法,重要的方法如下 -
open()
open()用于创建新表单。 它提供以下两个参数 -
$attributes - 表单标记为数组的属性或仅作为字符串的操作URL。
$hidden - 隐藏字段名称及其值的数组。
echo Form::open('/employee/add');
echo Form::open(array('action' => '/employee/add', 'method' => 'post'));
close()
close()只是关闭表单。
echo Form::close();
input()
input()创建html输入元素。 它有以下三个参数,
$field - 输入元素的名称
$value - 输入元素的值
$attributes - 输入元素的属性作为数组
echo Form::input('name', 'jon', array('style' => 'border: 20px;'));
标签元素
label创建html标签元素。 它有以下三个参数,
$label - 要显示的标签
$id - 关联的表单元素id
$attributes - 标签元素作为数组的属性
echo Form::label('Employee Name', 'employee_name');
hidden
hidden类似于input方法,除了它将input元素的类型设置为hidden。
password
password类似于input方法,除了它将input元素的类型设置为password。
radio
radio类似于输入法,除了它将输入元素的类型设置为radio。 它有以下四个参数,
$field - 输入元素的名称
$value - 输入元素的值
$checked - 是否$checked项目(true/false)
$attributes - 输入元素的属性作为数组
echo Form::label('Male', 'gender');
echo Form::radio('gender', 'Male', true);
echo Form::label('Female', 'gender');
echo Form::radio('gender', 'Female');
checkbox
checkbox类似于input方法,除了它将input元素的类型设置为checkbox。 它有以下四个参数,
$field - 输入元素的名称
$value - 输入元素的值
$checked - 是否$checked项目(true/false)
$attributes - 输入元素的属性作为数组
echo Form::label('Male', 'gender');
echo Form::checkbox('gender', 'Male', true);
echo Form::label('Female', 'gender');
echo Form::checkbox('gender', 'Female');
file
file类似于input方法,除了它将input元素的类型设置为file。
textarea的
textarea创建html textarea元素。 它有以下三个参数,
$field - textarea元素的名称
$value - textarea元素的值
$attributes - textarea元素作为数组的属性
echo Form::textarea ('description', 'original data (value)', array ('rows' => 6,
'cols' => 8));
选择
select创建一个HTML select元素。 它有以下四个参数 -
$field - 选择元素的名称
$values - 初始选择值
$options - 选项作为数组。 可以使用嵌套数组对选项进行分组
$attributes - 输入元素的属性作为数组
echo Form::select (
'country',
'none',
array (
'none' => 'None',
'asia' => array (
'in' > 'India',
'cn' => 'China'
),
'us' => 'United States'
)
);
submit
submit类似于input方法,除了它设置要提交的input元素的类型。
button
button创建html按钮元素。 它有以下三个参数,
$field - 按钮元素的名称
$value - 按钮元素的值
$attributes - 按钮元素的属性作为数组
echo Form::button('emp_submit', 'Submit');
重置 (reset)
reset与输入方法类似,只是它设置要重置的输入元素的类型。
fieldset_open
fieldset_open创建html字段集和图例元素。 它有以下两个参数 -
attributes - fieldset元素的属性为array
legend - 要创建的图例的名称
// 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
fieldset_close创建HTML字段集close标记。
// returns </fieldset>
echo Form::fieldset_close();
输入类
输入类提供了读取所有请求数据以及表单详细信息的方法。 一些重要的方法如下 -
uri
uri返回请求的当前URI
// request: http://localhost:8080/employee/welcome
echo Input::uri(); // return /employee/welcome
方法
method返回请求中使用的HTTP方法
echo Input::method() // "POST"
get
get使能读取$ _GET变量。 它有以下两个参数,
$index - $ _GET数组的索引
$default - 默认值,如果未找到索引。
echo Input::get('age', '20'); // returns $_GET['age']
post
post可以读取$ _POST变量。 它有以下两个参数,
$index - $ _POST数组的索引
$default - 默认值,如果未找到索引
echo Input::get('age', '20'); // returns $_POST['age']
param
param允许从$ _GET,$ _POST,$ _PUT或$ _DELETE变量中获取项目。 它有以下两个参数,
$index - 数组的索引
$default - 默认值,如果未找到索引
如果未指定参数,则返回所有项目。
echo Input::param('age', '20'); // returns $_POST['age']
file
file可以读取$ _FILE变量。 它有以下两个参数,
$index - $ _POST数组的索引
$default - 默认值,如果未找到索引
echo Input::file();
is_ajax
如果请求是通过AJAX发出的,则is_ajax返回true。
echo Input::is_ajax() // return false
protocol
protocol返回请求中使用的HTTP协议。
echo Input::protocol() // returns "HTTP"
ip
ip返回发出请求的IP地址。
echo Input::ip() // returns "84.45.34.24" (Public IP Address)
real_ip
real_ip尝试返回发出请求的真实IP地址(如果客户端在代理之后)。
echo Input::real_ip() // returns "10.76.12.1" (local private IP Address)
server
server允许读取$ _SERVER变量。 它有以下两个参数,
$index - $ _POST数组的索引
$default - 默认值,如果未找到索引。
echo Input::server('HTTP_HOST'); // returns localhost:8080
referrer
referrer从$ _SERVER变量返回引用者。 这是获取当前请求的http引用者的快捷方法。
user_agent
user_agent从$ _SERVER变量返回用户代理。 它是获取当前请求的http用户代理的快捷方法。
query_string
query_string从$ _SERVER变量返回查询字符串。 它是获取当前请求的查询字符串的快捷方法。
头
headers返回特定或所有标头。 它有以下两个参数 -
$index - HTTP标头的名称
$default - 默认值,如果未找到索引。
echo Input::headers('Content-Type'); // returns "text/html"
扩展(extension)
extension返回当前请求的URI扩展名。
// Example URL: http://localhost/test/
echo Input::extension(); // NULL
// Example URL: http://localhost/test.html
echo Input::extension(); // 'html'
工作示例 (Working Example)
让我们创建一个简单的表单,使用Form和Input类添加新员工。
创建表单
在员工控制器中创建新操作get_add ,如下所示。
public function get_add() {
return Response::forge(View::forge('employee/add'));
}
现在,添加操作视图,fuel/app/views/employee/add.php,如下所示。
<!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>
在这里,我们使用bootstrap来设计表单。 FuelPHP为bootstrap组件提供全面支持。 现在,请求页面http:// localhost:8080/employee/add将显示以下表单。
流程表
创建新操作, post_add处理表单,并将用户输入的员工数据添加到员工控制器的数据库中,如下所示。
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');
}
在这里,我们已经被重定向到员工列表页面,一旦用户输入的数据被保存到数据库中。 接下来,我们将创建员工列表页面。
列出员工
创建新操作,action_list以列出数据库中的员工,如下所示。
public function action_list() {
$data = array();
$data['emps'] = model_employee::find('all');
return Response::forge(view::forge('employee/list', $data));
}
为以上操作创建新视图, fuel/app/views/employee/list ,如下所示。
<ul>
<?php
foreach($emps as $emp) {
?>
<li><?php echo $emp['name']; ?></li>
<?php
}
?>
</ul>
查看表格
现在,请求URL, http://localhost:8080/employee/add ,输入一些员工数据,如下面的屏幕截图所示,并提交表单。
然后,它显示数据库中可用的所有员工(包括新添加的员工)如下 -