原文地址: 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());