Laravel 組件之 Forms & HTML 組件 (laravelcollective/html)

原文地址: Laravel Collective Forms & HTMLphp

安裝

首先經過 composer 來安裝這個 包, 編輯項目的 composer.json 文件. 在 require 部分 加入 laravelcollective/html :html

"require": {
    "laravelcollective/html": "5.1.*"
}

接下來從命令行更新 composer :laravel

composer update -vvv

接下來添加 provider 到 config/app.phpproviders 數組:數據庫

'providers' => [
    // ...
    Collective\Html\HtmlServiceProvider::class,
    // ...
],

最後 添加兩個類連接到 config/app.phpaliases 數組: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 表單僅僅支持 POSTGET方法, PUTDELETE 方法將會使用一個隱藏域_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))

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這個字段將會用 用戶 Modelemail 屬性來填充而且設置. 固然, 還有其餘用法. 若是一個字段在session 閃存數據中 也存在這個名字, 這個將會覆蓋模型中的這個字段值. 優先級是這個樣子的:

  1. Session Flash Data (Old Input) [session 閃存 / 老的輸入數據 ]
  2. Explicitly Passed Value [輸入值]
  3. 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', 'example@gmail.com');

Note: hiddentextarea 方法的參數和 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 連接

echo link_to_action('HomeController@getIndex', $title = null, $parameters = array(), $attributes = array());
相關文章
相關標籤/搜索