表單及HTML
- 開啟表單
- CSRF保護
- 標單模組綁定
- Labels
- Text, Text Area, Password 及 Hidden Fields
- Checkboxes 及 Radio Buttons
- 檔案
- 下拉式選單
- 按鈕
- 自訂巨集
開啟表單
開啟表單
{{ Form::open(array('url' => 'foo/bar')) }}
//
{{ Form::close() }}
預設表單使用 POST
方法,當然你也可以指定其他傳送表單的方法:
echo Form::open(array('url' => 'foo/bar', 'method' => 'put'))
注意: 因為 HTML表單只支援
POST
方法,所以在使用PUT
及DELETE
的方法時,Laravel將會自動加入隱藏的_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 中放置一個隨機的標記,這個 CSRF 參數會用隱藏欄位的方式自動加到你的表單中,你也可以使用 token
的方法去產生這個隱藏的 CSRF 標記欄位:
加入 CSRF 標記到表單
echo Form::token();
加入 CSRF 標記到路由中
Route::post('profile', array('before' => 'csrf', function()
{
//
}));
標單模組綁定
你可以使用 Form::model
的方法,將模型 (model) 中的內容加入到表單中:
開啟模型表單
echo Form::model($user, array('route' => array('user.update', $user->id)))
當你產生表單元素時,像是 text 欄位,模型的值將會自動比對到欄位名稱,並設定此欄位值,舉例來說,使用者模組的 email
屬性,將會設定到名稱為 email
的 text 欄位的欄位值,不僅如此,當 Session 中有與欄位名稱相符的名稱, Session 的值將會優先於模型的值,而優先順序如下所示:
- Session 的資料 (舊的輸入值)
- 明確傳遞的資料
- 模組屬性資料
這樣可以快速地建立表單,不僅是綁定模組資料,也可以在伺服器端資料驗證錯誤時,輕鬆的回填使用者輸入的舊資料!
注意: 當使用
Form::model
方法時,必須確保有使用Form::close
方法去關閉表單!
Labels
產生標籤 (Label) 元素
echo Form::label('email', 'E-Mail Address');
指定額外的 HTML 屬性
echo Form::label('email', 'E-Mail Address', array('class' => 'awesome'));
注意: 在建立標籤時,任何你建立的表單元素名稱與標籤相符時,將會自動在 ID 屬性建立與標籤名稱相同的 ID
Text, Text Area, Password 及 Hidden Fields
產生 Text 輸入欄位
echo Form::text('username');
指定預設值
echo Form::text('email', 'example@gmail.com');
注意: hidden 及 textarea 方法與 text 使用屬性參數是相同的
產生 Password 輸入欄位
echo Form::password('password');
Checkboxes 及 Radio Buttons
產生 Checkbox 或 Radio 輸入欄位
echo Form::checkbox('name', 'value');
echo Form::radio('name', 'value');
產生已被選擇的 Checkbox 或 Radio 輸入欄位
echo Form::checkbox('name', 'value', true);
echo Form::radio('name', 'value', true);
檔案
產生 File 輸入欄位
echo Form::file('image');
下拉式選單
產生下拉選單
echo Form::select('size', array('L' => 'Large', 'S' => 'Small'));
產生選擇預設值的下拉選單
echo Form::select('size', array('L' => 'Large', 'S' => 'Small'), 'S');
產生群組清單
echo Form::select('animal', array(
'Cats' => array('leopard' => 'Leopard'),
'Dogs' => array('spaniel' => 'Spaniel'),
));
按鈕
產生 Submit 輸入欄位
echo Form::submit('Click Me!');
注意: 需要產生 Button 元素嗎? 可以試著使用 button 方法去產生 Button元素,button 方法與 submit 使用屬性參數是相同的
自訂巨集
你可以輕鬆的定義你自己的表單類別 Helper 叫 "巨集 (macros)",首先只要註冊 巨集 ,並給預期名稱及封閉函式,以下是巨集的使用範例:
註冊表單巨集
Form::macro('myField', function()
{
return '<input type="awesome">';
});
使用 macro 註冊名稱呼叫你的自訂方法:
呼叫自訂表單巨集
echo Form::myField();