Skip to content

表单与 HTML

打开表单

打开表单

php
{{ Form::open(array('url' => 'foo/bar')) }}
	//
{{ Form::close() }}

默认情况下,将假定使用 POST 方法;但是,您可以指定其他方法:

php
echo Form::open(array('url' => 'foo/bar', 'method' => 'put'))
lightbulb

由于 HTML 表单仅支持 POSTGETPUTDELETE 方法将通过自动添加 _method 隐藏字段到您的表单来伪造。

您还可以打开指向命名路由或控制器操作的表单:

php
echo Form::open(array('route' => 'route.name'))

echo Form::open(array('action' => 'Controller@method'))

您还可以传递路由参数:

php
echo Form::open(array('route' => array('route.name', $user->id)))

echo Form::open(array('action' => array('Controller@method', $user->id)))

如果您的表单将接受文件上传,请在数组中添加 files 选项:

php
echo Form::open(array('url' => 'foo/bar', 'files' => true))

CSRF 保护

将 CSRF 令牌添加到表单

Laravel 提供了一种简单的方法来保护您的应用程序免受跨站请求伪造。首先,随机令牌被放置在用户的会话中。如果您使用 Form::open 方法与 POSTPUTDELETE,CSRF 令牌将自动作为隐藏字段添加到您的表单中。或者,如果您希望生成隐藏 CSRF 字段的 HTML,可以使用 token 方法:

php
echo Form::token();

将 CSRF 过滤器附加到路由

php
Route::post('profile', array('before' => 'csrf', function()
{
	//
}));

表单模型绑定

打开模型表单

通常,您会希望根据模型的内容填充表单。为此,请使用 Form::model 方法:

php
echo Form::model($user, array('route' => array('user.update', $user->id)))

现在,当您生成表单元素时,例如文本输入,模型中与字段名称匹配的值将自动设置为字段值。因此,例如,对于名为 email 的文本输入,用户模型的 email 属性将被设置为该值。但是,还有更多!如果会话闪存数据中有与输入名称匹配的项,则该项将优先于模型的值。因此,优先级如下:

  1. 会话闪存数据(旧输入)
  2. 显式传递的值
  3. 模型属性数据

这使您能够快速构建不仅绑定到模型值的表单,而且在服务器上发生验证错误时轻松重新填充!

lightbulb

使用 Form::model 时,请确保使用 Form::close 关闭您的表单!

标签

生成标签元素

php
echo Form::label('email', '电子邮件地址');

指定额外的 HTML 属性

php
echo Form::label('email', '电子邮件地址', array('class' => 'awesome'));
lightbulb

创建标签后,您创建的任何名称与标签名称匹配的表单元素将自动接收与标签名称匹配的 ID。

文本、文本区域、密码和隐藏字段

生成文本输入

php
echo Form::text('username');

指定默认值

php
echo Form::text('email', 'example@gmail.com');
lightbulb

隐藏文本区域 方法与 文本 方法具有相同的签名。

生成密码输入

php
echo Form::password('password');

生成其他输入

php
echo Form::email($name, $value = null, $attributes = array());
echo Form::file($name, $attributes = array());

复选框和单选按钮

生成复选框或单选输入

php
echo Form::checkbox('name', 'value');

echo Form::radio('name', 'value');

生成已选中的复选框或单选输入

php
echo Form::checkbox('name', 'value', true);

echo Form::radio('name', 'value', true);

数字

生成数字输入

php
echo Form::number('name', 'value');

文件输入

生成文件输入

php
echo Form::file('image');
lightbulb

表单必须以 files 选项设置为 true 打开。

下拉列表

生成下拉列表

php
echo Form::select('size', array('L' => '大', 'S' => '小'));

生成带有默认选中的下拉列表

php
echo Form::select('size', array('L' => '大', 'S' => '小'), 'S');

生成分组列表

php
echo Form::select('animal', array(
	'猫' => array('豹' => '豹'),
	'狗' => array('猎犬' => '猎犬'),
));

生成带有范围的下拉列表

php
echo Form::selectRange('number', 10, 20);

生成带有月份名称的列表

php
echo Form::selectMonth('month');

按钮

生成提交按钮

php
echo Form::submit('点击我!');
lightbulb

需要创建按钮元素?尝试 button 方法。它与 submit 方法具有相同的签名。

自定义宏

注册表单宏

定义自己的自定义表单类助手称为“宏”非常简单。它是这样工作的。首先,只需使用给定名称和闭包注册宏:

php
Form::macro('myField', function()
{
	return '<input type="awesome">';
});

现在您可以使用其名称调用宏:

调用自定义表单宏

php
echo Form::myField();

生成 URL

有关生成 URL 的更多信息,请查看 helpers 文档。