表单 & HTML
创建表单
创建表单
{{ Form::open(array('url' => 'foo/bar')) }}
//
{{ Form::close() }}
默认使用 POST
方法;当然,你也可以指定使用其他方法提交表单:
echo Form::open(array('url' => 'foo/bar', 'method' => 'put'))
注意
因为 HTML 表单只支持 POST
方法,在使用 PUT
和 DELETE
方法时框架会自动通过一个 _method
隐藏域来发送伪装的方法信息。
你也可以创建一个表单指向已定义的路由或者控制器操作:
echo Form::open(array('route' => 'route.name'))
echo Form::open(array('action' => 'Controller@method'))
如果你需要在表单中上传文件,请添加一个 files
参数到数组中:
echo Form::open(array('url' => 'foo/bar', 'files' => true))
CSRF防御机制
Laravel框架提供了一种简单的方法帮助你的应用抵御CSRF(跨站请求伪造)式攻击。Laravel框架会自动在用户 session 中存放一个随机令牌(token),并且将这个令牌作为一个隐藏字段包含在表单信息中。当然,你也可以使用表单的 token
方法直接调用令牌字段的HTML代码:
添加CSRF令牌到表单中
echo Form::token();
//译者注,调用结果类似: <input name="_token" type="hidden" value="BndR9iWzoKiseXuADa7gwzG5zf2ZKK3pPiRNvOGE">
在路由中附加CSRF过滤器
Route::post('profile', array('before' => 'csrf', function()
{
//
}));
表单与模型绑定
你可以使用 Form::model
方法将模型中的内容填充到表单中去:
创建一个模型表单
echo Form::model($user, array('route' => array('user.update', $user->id)))
当你创建一个表单元素(如文本输入字段)时,表单域的值会被自动设置成与之匹配的模型属性的值。例如表单中name属性为 email
的文本域的值会被设置为用户模型中 email
属性的值。不仅仅这样,当Session数据中有项目与表单域名称相匹配,Session值的填充优先级会高于模型的值。具体的优先级如下:
- Session 数据 (旧的输入数据)