原文地址: Laravel Collective Forms & HTMLphp
首先经过 composer 来安装这个 包, 编辑项目的 composer.json
文件. 在 require
部分 加入 laravelcollective/html
:html
"require": { "laravelcollective/html": "5.1.*" }
接下来从命令行更新 composer :laravel
composer update -vvv
接下来添加 provider 到 config/app.php
的 providers
数组:数据库
'providers' => [ // ... Collective\Html\HtmlServiceProvider::class, // ... ],
最后 添加两个类连接到 config/app.php
的 aliases
数组:json
'aliases' => [ // ... 'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class, // ... ],
{!! Form::open(array('url' => 'foo/bar')) !!} // {!! Form::close() !!}
默认是 POST
方法, 你能够随意指定其余接收方法数组
echo Form::open(array('url' => 'foo/bar', 'method' => 'put'))
Note: HTML 表单仅仅支持
POST
和GET
方法,PUT
和DELETE
方法将会使用一个隐藏域_method
添加到form 表单中来欺骗实现服务器
你可使用指定的控制器@动做
或者命名的路由来建立表单session
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
配置项.app
echo Form::open(array('url' => 'foo/bar', 'files' => true))
Laravel 提供了一个简单的方法来防止你的应用遭受跨站攻击. 首先会在你的session 中生成一个随机的 token, 若是你使用 Form::open
方法而且提交方法是 POST
, PUT
或者是 DELETE
, CSRF token 将会自动的添加到你的form 表单的隐藏域中. 换种方法 若是你像本身生成 CSRF token 字段, 你可使用 token
方法.
echo Form::token();
Route::post('profile', array('before' => 'csrf', function() { // }));
一般, 你须要想表单中填入来自数据库模型的数据. 想这样作你可使用 Form::model
方法.
echo Form::model($user, array('route' => array('user.update', $user->id)))
如今当你自动生成一个表单元素, 例如文本输入框. Model
的值将会自动匹配而且填写到相关的表单字段中.例如. 一个文本输入框的 name 是 email
这个字段将会用 用户 Model
的 email
属性来填充而且设置. 固然, 还有其余用法. 若是一个字段在session 闪存数据中 也存在这个名字, 这个将会覆盖模型中的这个字段值. 优先级是这个样子的:
这个可让你快速的使用模型数据来建立表单, 也能轻松的在服务器校验错误以后从新发布表单.
Note: 使用
Form::model
方法的时候必定要使用Form::close
来关闭表单!
echo Form::label('email', 'E-Mail Address');
echo Form::label('email', 'E-Mail Address', array('class' => 'awesome'));
Note: 在建立了一个标签以后, 若是有建立的表单元素的 name 值和 label 的 name 值相符的话, 将会自动在 表单元素 中自动匹配增长 id 属性. id 的值就是 label 的name 值.
echo Form::text('username');
echo Form::text('email', 'example@gmail.com');
Note: hidden 和 textarea 方法的参数和 text 相同.
echo Form::password('password', array('class' => 'awesome'));
echo Form::email($name, $value = null, $attributes = array()); echo Form::file($name, $attributes = array());
echo Form::checkbox('name', 'value'); echo Form::radio('name', 'value');
echo Form::checkbox('name', 'value', true); echo Form::radio('name', 'value', true);
echo Form::number('name', 'value');
echo Form::date('name', \Carbon\Carbon::now());
echo Form::file('image');
Note: 表单中必须设置
files
参数的值为true
echo Form::select('size', array('L' => 'Large', 'S' => 'Small'));
echo Form::select('size', array('L' => 'Large', 'S' => 'Small'), 'S');
这回建立一个没有任何值的 <option>
元素做为下拉列表的第一个选择值.
echo Form::select('size', array('L' => 'Large', 'S' => 'Small'), null, ['placeholder' => 'Pick a size...']);
echo Form::select('animal', array( 'Cats' => array('leopard' => 'Leopard'), 'Dogs' => array('spaniel' => 'Spaniel'), ));
echo Form::selectRange('number', 10, 20);
echo Form::selectMonth('month');
echo Form::submit('Click Me!');
Note: 想建立一个按钮元素? 试用 button 方法. 他和 submit 方法有相同的参数.
用来很方便的来自定义一个表单元素的方法叫作 macros
. 合理是怎样使用它. 首先简单的使用名称和闭包函数来注册一个 :
Form::macro('myField', function() { return '<input type="awesome">'; });
如今你可使用自定义的名字来调用这个 macro
echo Form::myField();
根据给定的URL生成 html 连接
echo link_to('foo/bar', $title = null, $attributes = array(), $secure = null);
生成一个连接到指定资源的 html
echo link_to_asset('foo/bar.zip', $title = null, $attributes = array(), $secure = null);
生成一个根据给定路由的html连接
echo link_to_route('route.name', $title = null, $parameters = array(), $attributes = array());
根据指定的控制器/方法来生成 html 连接
echo link_to_action('HomeController@getIndex', $title = null, $parameters = array(), $attributes = array());