典型的註冊表單:php
<!-- app/views/form.blade.php -->
{{ Form::open(array('url' => 'registration')) }} {{-- Username field. ------------------------}} {{ Form::label('username', 'Username') }} {{ Form::text('username') }} {{-- Email address field. -------------------}} {{ Form::label('email', 'Email address') }} {{ Form::email('email') }} {{-- Password field. ------------------------}} {{ Form::label('password', 'Password') }} {{ Form::password('password') }} {{-- Password confirmation field. -----------}} {{ Form::label('password_confirmation', 'Password confirmation') }} {{ Form::password('password_confirmation') }} {{-- Form submit button. --------------------}} {{ Form::submit('Register') }} {{ Form::close() }}
路由部分:laravel
// app/routes.php Route::get('/', function() { return View::make('form'); }); Route::post('/registration', function() { // 獲取全部表單數據. $data = Input::all(); // 建立驗證規則 $rules = array( 'username' => array('alpha_num', 'min:3') ); // 開始驗證 $validator = Validator::make($data, $rules); if ($validator->passes()) { // 驗證成功 return 'Data was saved.'; } // 驗證失敗 return Redirect::to('/'); });
驗證此規則的值必須符合給定的正則表達式。ajax
驗證此規則的值必須是 yes、 on 或者是 1。這在驗證是否贊成"服務條款"的時候很是有用。正則表達式
驗證此規則的值必須在給定的列表中存在。數據庫
驗證此規則的值必須在給定的列表中不存在。json
驗證此規則的值必須所有由字母字符構成。api
驗證此規則的值必須是一個數字。數組
驗證此規則的值必須所有由字母和數字構成。app
驗證此規則的值必須所有由字母、數字、中劃線或下劃線字符構成。框架
驗證此規則的值必須是一個合法的 URL。
注意: 已經證明此規則不嚴謹,相似 2http://url.com
的 URL 能夠經過驗證。
驗證此規則的值必須是一個合法的 URL,根據 PHP 函數 checkdnsrr。
注意: 因爲是基於 checkdnsrr 所以也可用於驗證郵箱地址是否存在。
驗證此規則的值必須是一個合法的電子郵件地址。
驗證此規則的值必須是一個圖片 (jpeg, png, bmp 或者 gif)。
驗證此規則的值必須是一個整數。
驗證此規則的值必須是一個合法的 IP 地址。
驗證此規則的值必須在給定日期以前,日期將經過 PHP 函數 strtotime 傳遞。
驗證此規則的值必須在給定日期以後,日期將經過 PHP 函數 strtotime 傳遞。
驗證此規則的值必須在給定的 min 和 max 之間。字符串、數字以及文件都將使用大小規則進行比較。
驗證此規則的值必須和 foo_confirmation 的值相同。好比,須要驗證此規則的域是 password,那麼在輸入中必須有一個與之相同的 password_confirmation 域。
驗證此規則的值必須與給定域的值相同。
驗證此規則的值的大小必須與給定的 value 相同。
對於字符串,value 表明字符的個數,
對於數字,value 表明它的整數值,
對於文件,value 表明文件以KB爲單位的大小。
驗證此規則的值必須是一個合法的日期,根據 PHP 函數 strtotime。
驗證此規則的值必須符合給定的 format 的格式,根據 PHP 函數 date_parse_from_format。
驗證此規則的值必須與指定的 field 域的值不一樣。
驗證此規則的值必須大於最小值 value。字符串、數字以及文件都將使用大小規則進行比較。
驗證此規則的值必須小於最大值 value。字符串、數字以及文件都將使用大小規則進行比較。
驗證此規則的文件的 MIME 類型必須在給定的列表中。
'photo' => 'mimes:jpeg,bmp,png'
注意: 當使用 regex 模式的時候,有必要使用數組指定規則,而不是管道分隔符,特別是正則表達式中包含一個管道字符的時候。
驗證此規則的值必須在輸入數據中存在。
當指定的域爲某個值的時候,驗證此規則的值必須存在。
僅當指定的域存在的時候,驗證此規則的值必須存在。
僅當指定的域不存在的時候,驗證此規則的值必須存在。
驗證此規則的值必須在指定的數據庫的表中存在。
'state' => 'exists:states'
指定列名
'state' => 'exists:states,abbreviation'
您也能夠指定更多的條件,將以 "where" 的形式添加到查詢。
'email' => 'exists:staff,email,account_id,1'
驗證此規則的值必須在給定的數據庫的表中惟一。若是 column 沒有被指定,將使用該域的名字。
'email' => 'unique:users'
指定列名
'email' => 'unique:users,email_address'
強制忽略一個給定的 ID
'email' => 'unique:users,email_address,10'
添加額外的where語句
你還能夠指定更多條件,這些條件將被添加到查詢的"where"語句中:
'email' => 'unique:users,email_address,NULL,id,account_id,1
在上面的規則中,只有account_id 爲 1 的行纔會被包含到unique檢查中。
Route::post('/registration', function() { // 獲取所有提交數據 $data = Input::all(); // 構造規則數組 $rules = array( 'username' => 'alpha_num' ); // 開始驗證 $validator = Validator::make($data, $rules); if ($validator->passes()) { // 驗證經過 return 'Data was saved.'; } // 驗證失敗 // 獲取錯誤消息 $errors = $validator->messages(); // 構造 JSON 響應 return Response::json($errors); });
return Redirect::to('/')->withErrors($validator);
注意: $errors
是系統預約義變量,任何模板中都可使用。
{{ $errors->first('username') }}
@foreach($errors->get('username') as $message) <li>{{ $message }}</li> @endforeach
@foreach($errors->all() as $message) <li>{{ $message }}</li> @endforeach
@if($errors->has('email')) <p>Yey, an error!</p> @endif
{{ $errors->first('username', '<span class="error">:message</span>') }}
注意: 默認狀況下,消息將使用與 Bootstrap 兼容的語法進行格式化。
@foreach($errors->all('<li>:message</li>') as $message) {{ $message }} @endforeach
注意: 匿名函數 和 指向普通類方法 的 規則擴展 並不推薦,所以直接介紹如何直接擴展官方的驗證器。
編寫擴展驗證器類:
class ExValidator extends Illuminate\Validation\Validator { // 規則 public function validateFoo($attribute, $value, $parameters) { return $value == 'foo'; } // 消息 protected function replaceFoo($message, $attribute, $rule, $parameters) { return str_replace(':foo', $parameters[0], $message); } }
註冊定製的驗證器擴展:
Validator::resolver(function($translator, $data, $rules, $messages) { return new ExValidator($translator, $data, $rules, $messages); });
詳細的編寫方法請參照官方類 /vendor/laravel/framework/src/Illuminate/Validation/Validator.php
。
針對某一個驗證規則:
$messages = array( 'required' => 'The :attribute field is required.', ); $validator = Validator::make($input, $rules, $messages);
針對指定域的某一規則:
$messages = array( 'email.required' => 'We need to know your e-mail address!', );
在語言文件中定義 /app/lang/zh-CN/validation.php
:
原文:http://my.oschina.net/5say/blog/186568我我的更喜歡使用Request方式進行驗證;使用laravel的artisan命令 php artisan make:request XxxxxRequest.php中進行驗證使用request驗證的好處是能夠 表單使用ajax提交的時候 框架會自動返回json錯誤消息,其餘提交方式 框架仍然使用$message返回'custom' => array( 'email' => array( 'required' => '請填寫您的 email 地址。', ), ),