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

安裝

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這個字段將會用 用戶 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', '[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 鏈接

echo link_to_action('HomeController@getIndex', $title = null, $parameters = array(), $attributes = array());

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章