表单 & 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 数据 (旧的输入数据)
- 已传输的数据
- 模型属性数据
这可以帮助你快速建立与模型绑定的表单,而且当服务器端验证出表单错误时可以轻松回填数据!
注意: 当你使用
Form::model
时,别忘了在表单结尾处加上Form::close
!
Label 标签
获取一个 label 标签元素
echo Form::label('email', 'E-Mail Address');
//译者注,输出结果为: <label for="email">E-Mail Address</label>
设定其他 HTML 标签属性
echo Form::label('email', 'E-Mail Address', array('class' => 'awesome'));
//译者注,输出结果为: <label for="email" class="awesome">E-Mail Address</label>
注意: 当你创建了一个label标签后,name值与之相匹配的表单元素会被自动加上一个同名的ID属性。
单行文本、多行文本、密码和隐藏表单域
获取一个单行文本域
echo Form::text('username');
//译者注,输出结果为: <input name="username" type="text">
设置一个默认的值
echo Form::text('email', 'example@gmail.com');
//译者注,输出结果为: <input name="email" type="text" value="example@gmail.com">
注意: 调用 hidden 隐藏域和 textarea 多行文本表单域的方法和调用 text 单行文本域的方法是一样的。
获取一个密码域
echo Form::password('password');
//译者注,输出结果为: <input name="password" type="password" value="">
多选框和单选框
获取一个多选框和单选框
echo Form::checkbox('name', 'value');
//译者注,输出结果为: <input name="name" type="checkbox" value="value">
echo Form::radio('name', 'value');
//译者注,输出结果为: <input name="name" type="radio" value="value">
获取一个已选中的多选框和单选框
echo Form::checkbox('name', 'value', true);
//译者注,输出结果为: <input checked="checked" name="name" type="checkbox" value="value">
echo Form::radio('name', 'value', true);
//译者注,输出结果为: <input checked="checked" name="name" type="radio" value="value">
文件上传
获取一个文件上传域
echo Form::file('image');
//译者注,输出结果为: <input name="image" type="file">
下拉菜单
获取一个下拉菜单
echo Form::select('size', array('L' => 'Large', 'S' => 'Small'));
//译者注,输出结果为: <select name="size"><option value="L">Large</option><option value="S">Small</option></select>
获取一个已选中默认值的下拉菜单
echo Form::select('size', array('L' => 'Large', 'S' => 'Small'), 'S');
//译者注,输出结果为: <select name="size"><option value="L">Large</option><option value="S" selected="selected">Small</option></select>
获取一个分组下拉菜单
echo Form::select('animal', array(
'Cats' => array('leopard' => 'Leopard'),
'Dogs' => array('spaniel' => 'Spaniel'),
));
//译者注,输出结果为: <select name="animal"><optgroup label="Cats"><option value="leopard">Leopard</option></optgroup><optgroup label="Dogs"><option value="spaniel">Spaniel</option></optgroup></select>
生成一个包含可取值范围的下拉菜单
echo Form::selectRange('number', 10, 20);
生成月份名称列表
echo Form::selectMonth('month');
按钮
获取一个提交按钮
echo Form::submit('Click Me!');
//译者注,输出结果为: <input type="submit" value="Click Me!">
注意: 如果需要创建一个单独的表单元素,可以使用 button 方法。它的调用方式和 submit 方法一样。
自定义宏
你可以轻松定义一个表单宏来帮助你创建表单。下面是使用表单宏的方法,注册一个宏名称,然后在闭包函数中定义对应的操作:
注册一个表单宏
Form::macro('myField', function()
{
return '<input type="awesome">';
});
然后你就可以使用刚刚定义的宏名称调用它:
调用一个自定义表单宏
echo Form::myField();
请参考 helpers 文档了解更多关于生成URL的信息。