- FuelPHP 教程
- FuelPHP - 首页
- FuelPHP - 简介
- FuelPHP - 安装
- FuelPHP - 架构概述
- FuelPHP - 简易 Web 应用
- FuelPHP - 配置
- FuelPHP - 控制器
- FuelPHP - 路由
- FuelPHP - 请求 & 响应
- FuelPHP - 视图
- FuelPHP - 展示器
- FuelPHP - 模型 & 数据库
- FuelPHP - 表单编程
- FuelPHP - 验证
- 高级表单编程
- FuelPHP - 文件上传
- FuelPHP - Ajax
- FuelPHP - HMVC 请求
- FuelPHP - 主题
- FuelPHP - 模块
- FuelPHP - 包
- Cookie & Session 管理
- FuelPHP - 事件
- FuelPHP - 邮件管理
- FuelPHP - 分析器
- 错误处理 & 调试
- FuelPHP - 单元测试
- 完整的运行示例
- FuelPHP 有用资源
- FuelPHP - 快速指南
- FuelPHP - 有用资源
- FuelPHP - 讨论
FuelPHP - 表单编程
FuelPHP 提供三个类,Form、Fieldset 和 Input,用于执行表单编程。
Form 类提供创建所有 HTML 表单元素的选项。
Fieldset 类提供通过更高级的方法创建 html 元素的选项,整合了模型和验证。
Input 类提供解析通过 html 表单提交的数据以及 http 参数、服务器变量和用户代理的选项。
在本章中,让我们学习 FuelPHP 中的表单编程。
表单
如前所述,Form 类提供创建 html 表单元素的方法,重要方法如下:
open()
open() 用于创建一个新表单。它提供以下两个参数:
$attributes - 表单标签的属性,可以是数组或仅为 action 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 元素
label 创建 html label 元素。它有以下三个参数:
$label - 要显示的标签
$id - 关联的表单元素 ID
$attributes - label 元素的属性,以数组形式
echo Form::label('Employee Name', 'employee_name');
hidden
hidden 与 input 方法类似,只是它将输入元素的类型设置为隐藏。
password
password 与 input 方法类似,只是它将输入元素的类型设置为密码。
radio
radio 与 input 方法类似,只是它将输入元素的类型设置为单选按钮。它有以下四个参数:
$field - 输入元素的名称
$value - 输入元素的值
$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 方法类似,只是它将输入元素的类型设置为复选框。它有以下四个参数:
$field - 输入元素的名称
$value - 输入元素的值
$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 方法类似,只是它将输入元素的类型设置为文件。
textarea
textarea 创建 html textarea 元素。它有以下三个参数:
$field - textarea 元素的名称
$value - textarea 元素的值
$attributes - textarea 元素的属性,以数组形式
echo Form::textarea ('description', 'original data (value)', array ('rows' => 6, 'cols' => 8));
select
select 创建一个 HTML select 元素。它有以下四个参数:
$field - select 元素的名称
$values - 初始选择值
$options - 选项数组。选项可以使用嵌套数组进行分组
$attributes - 输入元素的属性,以数组形式
echo Form::select ( 'country', 'none', array ( 'none' => 'None', 'asia' => array ( 'in' > 'India', 'cn' => 'China' ), 'us' => 'United States' ) );
submit
submit 与 input 方法类似,只是它将输入元素的类型设置为提交。
button
button 创建 html button 元素。它有以下三个参数:
$field - button 元素的名称
$value - button 元素的值
$attributes - button 元素的属性,以数组形式
echo Form::button('emp_submit', 'Submit');
reset
reset 与 input 方法类似,只是它将输入元素的类型设置为重置。
fieldset_open
fieldset_open 创建 html fieldset 和 legend 元素。它有以下两个参数:
attributes - fieldset 元素的属性,以数组形式
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 fieldset 关闭标签。
// returns </fieldset> echo Form::fieldset_close();
Input 类
Input 类提供读取所有请求数据以及表单详细信息的方法。一些重要方法如下:
uri
uri 返回请求的当前 URI
// request: https://127.0.0.1:8080/employee/welcome echo Input::uri(); // return /employee/welcome
method
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
is_ajax 如果请求是通过 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
headers 返回特定或所有标头。它有以下两个参数:
$index - HTTP 标头的名称
$default - 如果未找到索引,则为默认值。
echo Input::headers('Content-Type'); // returns "text/html"
extension
extension 返回当前请求的 URI 扩展名。
// Example URL: https://127.0.0.1/test/ echo Input::extension(); // NULL // Example URL: https://127.0.0.1/test.html echo Input::extension(); // 'html'
运行示例
让我们创建一个简单的表单,使用 Form 和 Input 类添加新员工。
创建表单
在 employee 控制器中创建一个新的 action,get_add,如下所示。
public function get_add() { return Response::forge(View::forge('employee/add')); }
现在,为该 action 添加视图,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 组件。现在,请求页面 https://127.0.0.1:8080/employee/add 将显示以下表单。
处理表单
创建一个新的 action,post_add,用于处理表单并将用户输入的员工数据添加到 employee 控制器中的数据库中,如下所示。
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,action_list,用于列出数据库中的员工,如下所示。
public function action_list() { $data = array(); $data['emps'] = model_employee::find('all'); return Response::forge(view::forge('employee/list', $data)); }
为上述 action 创建一个新的视图,fuel/app/views/employee/list,如下所示。
<ul> <?php foreach($emps as $emp) { ?> <li><?php echo $emp['name']; ?></li> <?php } ?> </ul>
检查表单
现在,请求 URL,https://127.0.0.1:8080/employee/add,输入一些员工数据(如下图所示)并提交表单。
然后,它将显示数据库中所有可用的员工(包括新添加的员工),如下所示: