表单与 HTML
开启表单
开启表单
{{ Form::open(array('url' => 'foo/bar')) }}
//
{{ Form::close() }}
默认表单使用 POST 方法,当然您也可以指定传参其他表单的方法:
echo Form::open(array('url' => 'foo/bar', 'method' => 'put'))
注意
因为 HTML 表单只支持 POST
和 GET
方法,所以在使用 PUT
及 DELETE
的方法时,Laravel 将会自动加入隐藏的 _method
字段到表单中,来伪装表单传送的方法。
您也可以建立指向命名的路由或控制器至表单:
echo Form::open(array('route' => 'route.name'))
echo Form::open(array('action' => 'Controller@method'))
您也可以传递路由参数:
echo Form::open(array('route' => array('route.name', $user->id)))
echo Form::open(array('action' => array('Controller@method', $user->id)))
如果您的表单允许上传文件,可以加入 files
选项到参数中:
echo Form::open(array('url' => 'foo/bar', 'files' => true))
CSRF 保护
添加 CSRF Token 到表单
Laravel 提供简易的方法,让您可以保护您的应用程序不受到 CSRF (跨网站请求伪造) 攻击。首先 Laravel 会自动在用户的 session 中放置随机的 token,如果你使用 Form::open
方法并使用 POST
,PUT
或者 DELETE
,这个 CSRF 参数会用隐藏字段的方式自动加到您的表单中,您也可以使用 token
的方法去产生这个隐藏的 CSRF token 字段:
echo Form::token();
附加 CSRF 过滤器到路由
Route::post('profile', array('before' => 'csrf', function()
{
//
}));
表单模型绑定
开启模型表单
您经常会想要将模型内容加入至表单中,您可以使用 Form::model
方法实现:
echo Form::model($user, array('route' => array('user.update', $user->id)))
现在当您产生表单元素时,如 text 字段,模型的值将会自动比对到字段名称,并设定此字段值,举例来说,用户模型的 email
属性,将会设定到名称为 email
的 text 字段的字段值,不仅如此,当 Session 中有与字段名称相符的名称, Session 的值将会优先于模型的值,而优先顺序如下:
- Session 的数据 (旧的输入值)
- 明确传递的数据
- 模型属性数据
这样可以允许您快速地建立表单,不仅是绑定模型数据,也可以在服务器端数据验证错误时,轻松的回填用户输入的旧数据!
注意
当使用 Form::model
方法时,必须确保有使用 Form::close
方法来关闭表单!