安裝
1.安裝 HTML 之前,需要確保PHP版本是否叨叨你使用的框架的環境要求
我們使用Composer在命令行安裝最新版本的laravelcollective/html
composer require laravelcollective/html
執行命令後,會在項目composer.json文件中的require中增加如下圖所示:
如果這一步驟執行失敗了,也沒關係,可能是你的框架不支持最新版本的,可以直接指定版本更新:
composer require laravelcollective/html 5.3.*
這樣也可以。
還有一種方式去加載:
首先通過 composer 來安裝這個 包, 編輯項目的 composer.json
文件. 在 require
部分 加入laravelcollective/html
:
"require": {
"laravelcollective/html": "5.3.*"
}
接下來從命令行更新 composer :
composer update
更新完成之後,打開config/app.php
在providers數組下面添加
'Illuminate\Html\HtmlServiceProvider',
在aliases數組下面添加
'Form' => 'Illuminate\Html\FormFacade',
'HTML' => 'Illuminate\Html\HtmlFacade'
這樣就安裝好啦!
創建表單
打開表單
{!! 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 表單中來欺騙實現
你可以使用指定的控制器@動作
或者命名的路由來創建表單
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 提供了一個簡單的方法來防止你的應用遭受跨站攻擊. 首先會在你的session 中生成一個隨機的 token, 如果你使用 Form::open
方法並且提交方法是POST
,
PUT
或者是 DELETE
, CSRF token 將會自動的添加到你的form 表單的隱藏域中. 換種方法 如果你像自己生成 CSRF token 字段, 你可以使用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)))
現在當你自動生成一個表單元素, 例如文本輸入框. Model
的值將會自動匹配並且填寫到相關的表單字段中.例如. 一個文本輸入框的 name 是email
這個字段將會用 用戶
Model
的 email
屬性來填充並且設置. 當然, 還有其他用法. 如果一個字段在session 閃存數據中 也存在這個名字, 這個將會覆蓋模型中的這個字段值. 優先級是這個樣子的:
- Session Flash Data (Old Input) [session 閃存 / 老的輸入數據 ]
- Explicitly Passed Value [輸入值]
- Model Attribute Data [模型屬性值]
這個可以讓你快速的使用模型數據來創建表單, 也能輕鬆的在服務器校驗錯誤之後重新發布表單.
Note: 使用 Form::model方法的時候一定要使用 Form::close來關閉表單!
標籤
生成標籤元素
echo Form::label('email', 'E-Mail Address');
指定額外的 html 屬性
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', '[email protected]');
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
調用自定義的 Form Macro
echo Form::myField();
生成URL
link_to
根據給定的URL生成 html 鏈接
echo link_to('foo/bar', $title = null, $attributes = array(), $secure = null);
link_to_asset
生成一個鏈接到指定資源的 html
echo link_to_asset('foo/bar.zip', $title = null, $attributes = array(), $secure = null);
link_to_route
生成一個根據給定路由的html鏈接
echo link_to_route('route.name', $title = null, $parameters = array(), $attributes = array());
link_to_action
根據指定的控制器/方法來生成 html 鏈接