Laravel架構表單驗證詳解,laravel架構表單
基礎驗證例子
複製代碼 代碼如下:
$validator = Validator::make(
array('name' => 'Dayle'),
array('name' => 'required|min:5')
);
傳遞給 make 函數的第一個參數是待驗證的資料,第二個參數是對該資料需要應用的驗證規則。
多個驗證規則可以通過 "|" 字元進行隔開,或者作為數組的一個單獨的元素。
通過數組指定驗證規則
複製代碼 代碼如下:
$validator = Validator::make(
array('name' => 'Dayle'),
array('name' => array('required', 'min:5'))
);
一旦一個 Validator 執行個體被建立,可以使用 fails (或者 passes)函數執行這個驗證。
複製代碼 代碼如下:
if ($validator->fails())
{
// The given data did not pass validation
}
如果驗證失敗,您可以從驗證器中擷取錯誤訊息。
複製代碼 代碼如下:
$messages = $validator->messages();
您也可以使用 failed 函數得到不帶錯誤訊息的沒有通過驗證的規則的數組。
複製代碼 代碼如下:
$failed = $validator->failed();
檔案驗證
Validator 類提供了一些驗證規則用於驗證檔案,比如 size、mimes等。在驗證檔案的時候,您可以和其他驗證一樣傳遞給驗證器。
附帶錯誤訊息
在一個 Validator 執行個體上調用 messages 函數之後,將會得到一個 MessageBag 執行個體,該執行個體擁有很多處理錯誤訊息的方便的函數。
擷取一個域的第一個錯誤訊息
複製代碼 代碼如下:
echo $messages->first('email');
擷取一個域的全部錯誤訊息
複製代碼 代碼如下:
foreach ($messages->get('email') as $message)
{
//
}
擷取全部域的全部錯誤訊息
複製代碼 代碼如下:
foreach ($messages->all() as $message)
{
//
}
檢查一個域是否存在訊息
複製代碼 代碼如下:
if ($messages->has('email'))
{
//
}
以某種格式擷取一條錯誤訊息
複製代碼 代碼如下:
echo $messages->first('email', '
:message
');
注意: 預設情況下,訊息將使用與 Bootstrap 相容的文法進行格式化。
以某種格式擷取所有錯誤訊息
複製代碼 代碼如下:
foreach ($messages->all('
:message') as $message)
{
//
}
錯誤訊息 & 視圖
一旦您執行了驗證,您需要一種簡單的方法向視圖反饋錯誤訊息。這在 Lavavel 中能夠方便的處理。以下面的路由作為例子:
複製代碼 代碼如下:
Route::get('register', function()
{
return View::make('user.register');
});
Route::post('register', function()
{
$rules = array(...);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails())
{
return Redirect::to('register')->withErrors($validator);
}
});
注意當驗證失敗,我們使用 withErrors 函數把 Validator 執行個體傳遞給 Redirect。這個函數將重新整理 Session 中儲存的錯誤訊息,使得在下次請求中能夠可用。
然而,注意我們沒有必要明確的在 GET 路由中綁定錯誤訊息到路由。這是因為 Laravel 總會檢查 Session 中的錯誤,並自動綁定它們到視圖如果它們是可用的。所以,對於每個請求,一個 $errors 變數在所有視圖中總是可用的,允許您方便的認為 $errors 總是被定義並可以安全使用的。$errors 變數將是一個 MessageBag 類的執行個體。
所以,在跳轉之後,您可以在視圖中使用自動綁定的 $errors 變數:
複製代碼 代碼如下:
<?php echo $errors->first('email'); ?>
可用的驗證規則
下面是一個所有可用的驗證規則的列表以及它們的功能:
複製代碼 代碼如下:
Accepted
Active URL
After (Date)
Alpha
Alpha Dash
Alpha Numeric
Before (Date)
Between
Confirmed
Date
Date Format
Different
E-Mail
Exists (Database)
Image (File)
In
Integer
IP Address
Max
MIME Types
Min
Not In
Numeric
Regular Expression
Required
Required If
Required With
Required Without
Same
Size
Unique (Database)
accepted
驗證此規則的值必須是 yes、 on 或者是 1。這在驗證是否同意"服務條款"的時候非常有用。
active_url
驗證此規則的值必須是一個合法的 URL,根據 PHP 函數 checkdnsrr。
after:date
驗證此規則的值必須在給定日期之後,日期將通過 PHP 函數 strtotime 傳遞。
alpha
驗證此規則的值必須全部由字母字元構成。
alpha_dash
驗證此規則的值必須全部由字母、數字、中劃線或底線構成。
alpha_num
驗證此規則的值必須全部由字母和數字構成。
before:date
驗證此規則的值必須在給定日期之前,日期將通過 PHP 函數 strtotime 傳遞。
between:min,max
驗證此規則的值必須在給定的 min 和 max 之間。字串、數字以及檔案都將使用大小規則進行比較。
confirmed
驗證此規則的值必須和 foo_confirmation 的值相同。比如,需要驗證此規則的域是 password,那麼在輸入中必須有一個與之相同的 password_confirmation 域。
date
驗證此規則的值必須是一個合法的日期,根據 PHP 函數 strtotime。
date_format:format
驗證此規則的值必須符合給定的 format 的格式,根據 PHP 函數 date_parse_from_format。
different:field
驗證此規則的值必須與指定的 field 域的值不同。
email
驗證此規則的值必須是一個合法的電子郵件地址。
exists:table,column
驗證此規則的值必須在指定的資料庫的表中存在。
Exists 規則的基礎使用
複製代碼 代碼如下:'state' => 'exists:states'
指定列名
複製代碼 代碼如下:
'state' => 'exists:states,abbreviation'
您也可以指定更多的條件,將以 "where" 的形式添加到查詢。
複製代碼 代碼如下:
'email' => 'exists:staff,email,account_id,1'
image
驗證此規則的值必須是一個圖片 (jpeg, png, bmp 或者 gif)。
in:foo,bar,...
驗證此規則的值必須在給定的列表中存在。
integer
驗證此規則的值必須是一個整數。
驗證此規則的值必須是一個合法的 IP 位址。
max:value
驗證此規則的值必須小於最大值 value。字串、數字以及檔案都將使用大小規則進行比較。
mimes:foo,bar,...
驗證此規則的檔案的 MIME 類型必須在給定的列表中。
MIME 規則的基礎使用
複製代碼 代碼如下:
'photo' => 'mimes:jpeg,bmp,png'
min:value
驗證此規則的值必須大於最小值 value。字串、數字以及檔案都將使用大小規則進行比較。
not_in:foo,bar,...
驗證此規則的值必須在給定的列表中不存在。
numeric
驗證此規則的值必須是一個數字。
regex:pattern
驗證此規則的值必須符合給定的Regex。
注意: 當使用 regex 模式的時候,有必要使用數組指定規則,而不是管道分隔字元,特別是Regex中包含一個管道字元的時候。
required
驗證此規則的值必須在輸入資料中存在。
required_if:field,value
當指定的域為某個值的時候,驗證此規則的值必須存在。
required_with:foo,bar,...
僅當指定的域存在的時候,驗證此規則的值必須存在。
required_without:foo,bar,...
僅當指定的域不存在的時候,驗證此規則的值必須存在。
same:field
驗證此規則的值必須與給定域的值相同。
size:value
驗證此規則的值的大小必須與給定的 value 相同。對於字串,value 代表字元的個數;對於數字,value 代表它的整數值,對於檔案,value 代表檔案以KB為單位的大小。
unique:table,column,except,idColumn
驗證此規則的值必須在給定的資料庫的表中唯一。如果 column 沒有被指定,將使用該域的名字。
Unique 規則的基礎使用
複製代碼 代碼如下:
'email' => 'unique:users'
指定列名
'email' => 'unique:users,email_address'
強制忽略一個給定的 ID
'email' => 'unique:users,email_address,10'
url
驗證此規則的值必須是一個合法的 URL。
定製錯誤訊息
如果有需要,您可以使用定製的錯誤訊息代替預設的訊息。這裡有好幾種定製錯誤訊息的方法。
傳遞定製訊息到驗證器
複製代碼 代碼如下:
$messages = array(
'required' => 'The :attribute field is required.',
);
$validator = Validator::make($input, $rules, $messages);
注意: :attribute 預留位置將被實際的進行驗證的域的名字代替,您也可以在錯誤訊息中使用其他預留位置。
其他驗證預留位置
複製代碼 代碼如下:
$messages = array(
'same' => 'The :attribute and :other must match.',
'size' => 'The :attribute must be exactly :size.',
'between' => 'The :attribute must be between :min - :max.',
'in' => 'The :attribute must be one of the following types:
:values',
);
有些時候,您可能希望只對一個指定的域指定定製的錯誤訊息:
對一個指定的域指定定製的錯誤訊息
複製代碼 代碼如下:
$messages = array(
'email.required' => 'We need to know your e-mail address!',
);
在一些情況下,您可能希望在一個語言檔案中指定錯誤訊息而不是直接傳遞給 Validator。為了實現這個目的,請在 app/lang/xx/validation.php 檔案中添加您的定製訊息到 custom 數組。
在語言檔案中指定錯誤訊息
複製代碼 代碼如下:
'custom' => array(
'email' => array(
'required' => 'We need to know your e-mail address!',
),
),
定製驗證規則
Laravel 提供了一系列的有用的驗證規則;但是,您可能希望添加自己的驗證規則。其中一種方法是使用 Validator::extend 函數註冊定製的驗證規則:
註冊一個定製的驗證規則
複製代碼 代碼如下:
Validator::extend('foo', function($attribute, $value, $parameters)
{
return $value == 'foo';
});
注意: 傳遞給 extend 函數的規則的名字必須符合 "snake cased" 命名規則。
定製的驗證器接受三個參數:待驗證屬性的名字、待驗證屬性的值以及傳遞給這個規則的參數。
您也可以傳遞一個類的函數到 extend 函數,而不是使用閉包:
複製代碼 代碼如下:
Validator::extend('foo', 'FooValidator@validate');
注意您需要為您的定製規則定義錯誤訊息。您既可以使用一個行內的定製訊息數組,也可以在驗證語言檔案中進行添加。
您也可以擴充 Validator 類本身,而不是使用閉包回調擴充驗證器。為了實現這個目的,添加一個繼承自 Illuminate\Validation\Validator 的驗證器類。您可以添加在類中添加以 validate 開頭的驗證函式:
擴充驗證器類
複製代碼 代碼如下:
<?php
class CustomValidator extends Illuminate\Validation\Validator {
public function validateFoo($attribute, $value, $parameters)
{
return $value == 'foo';
}
}
下面,您需要註冊定製的驗證器擴充:
您需要註冊定製的驗證器擴充
複製代碼 代碼如下:
Validator::resolver(function($translator, $data, $rules, $messages)
{
return new CustomValidator($translator, $data, $rules, $messages);
});
當建立一個定製的驗證規則,您有時需要為錯誤訊息定義一個定製的預留位置。為了實現它,您可以像上面那樣建立一個定製的驗證器,並且在驗證器中添加一個 replaceXXX 函數:
複製代碼 代碼如下:
protected function replaceFoo($message, $attribute, $rule, $parameters)
{
return str_replace(':foo', $parameters[0], $message);
}
javascript中的表單驗證的函數怎調用多個?
可以專門寫一個方法匯總呀。
例如:
function checkFrom(){
return method1()&&method2()&&method3()&&method4()&&method5()..;
}
不過最好整理一下驗證的方法,做成一個比較通用的驗證架構。
推薦一款js表單校正架構
其實jqueryValidate是可以自訂錯誤資訊的。請參考它的文檔。
這裡可以使用showErrors屬性:
$(".selector").validate({ showErrors: function(errorMap, errorList) { $("#summary").html("Your form contains " + this.numberOfInvalids() + " errors, see details below."); this.defaultShowErrors(); }});
也可以參考這些屬性:errorLabelContainer,errorContainer,wrapper,errorElement,validClass,errorClass。只需要自訂錯誤提示的HTML結構,浮動框可以使用CSS控制。
http://www.bkjia.com/PHPjc/874636.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/874636.htmlTechArticleLaravel架構表單驗證詳解,laravel架構表單 基礎驗證例子 複製代碼 代碼如下: $validator = Validator::make( array('name' = 'Dayle'), array('name' = 'required|...