基本的な検証例
$validator = Validator::make( array('name' => 'Dayle'), array('name' => 'required|min:5') );
make 関數(shù)に渡される最初のパラメータは検証対象のデータであり、2 番目のパラメータはデータに適用する必要がある検証ルールです。
複數(shù)の検証ルールは、「|」文字で區(qū)切るか、配列の個(gè)別の要素として區(qū)切ることができます。
配列を介して検証ルールを指定する
$validator = Validator::make( array('name' => 'Dayle'), array('name' => array('required', 'min:5')) );
Validator インスタンスが作成されたら、失敗 (または合格) 関數(shù)を使用してこの検証を?qū)g行できます。
if ($validator->fails()) { // The given data did not pass validation }
検証が失敗した場合は、バリデーターからエラー メッセージを取得できます。
$messages = $validator->messages();
failed 関數(shù)を使用して、エラー メッセージなしで検証に失敗したルールの配列を取得することもできます。
$failed = $validator->failed();
ファイル検証
Validator クラスは、サイズ、MIME など、ファイルを検証するためのいくつかの検証ルールを提供します。ファイルを検証するときは、他の検証と同様に、ファイルをバリデーターに渡すことができます。
エラーメッセージが付屬
Validator インスタンスでメッセージ関數(shù)を呼び出すと、エラー メッセージを処理するための便利な関數(shù)が多數(shù)含まれる MessageBag インスタンスが取得されます。
ドメインの最初のエラーメッセージを取得する
echo $messages->first('email');
ドメインのすべてのエラーメッセージを取得する
foreach ($messages->get('email') as $message) { // }
すべてのドメインのすべてのエラーメッセージを取得する
foreach ($messages->all() as $message) { // }
ドメインにメッセージが存在するかどうかを確認(rèn)する
if ($messages->has('email')) { // }
特定のエラーを取得するformat Message
echo $messages->first('email', '<p>:message</p>');
注: デフォルトでは、メッセージはブートストラップ互換の構(gòu)文を使用してフォーマットされます。
すべてのエラー メッセージを何らかの形式で取得する
foreach ($messages->all('<li>:message</li>') as $message) { // }
エラー メッセージとビュー
検証を?qū)g行したら、エラー メッセージをビューにフィードバックする簡単な方法が必要です。これは 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 関數(shù)を使用して Validator インスタンスを Redirect に渡すことに注意してください。この関數(shù)は、セッションに保存されたエラー メッセージを更新して、次のリクエストで使用できるようにします。
ただし、GET ルート內(nèi)のルートにエラー メッセージを明示的にバインドする必要がないことに注意してください。これは、Laravel が常にセッションのエラーをチェックし、エラーが利用可能な場合は自動(dòng)的にビューにバインドするためです。したがって、すべてのリクエストについて、$errors 変數(shù)は常にすべてのビューで使用できるため、$errors が常に定義されており、安全に使用できると便利に想定できます。 $errors 変數(shù)は、MessageBag クラスのインスタンスになります。
そのため、ジャンプ後、ビューで自動(dòng)的にバインドされた $errors 変數(shù)を使用できます:
<?php echo $errors->first('email'); ?>
利用可能な検証ルール
以下は、利用可能なすべての検証ルールとその関數(shù)のリストです:
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
Validate thatこのルールの値は、yes、on、または 1 である必要があります。これは、利用規(guī)約への同意を確認(rèn)する場合に役立ちます。
active_url
PHP 関數(shù) checkdnsrr に従って、このルールの値が有効な URL である必要があることを検証します。
after:date
このルールの値が指定された日付より後でなければならないことを検証します。日付は PHP 関數(shù) strtotime を通じて渡されます。
alpha
このルールを検証する値は、完全にアルファベット文字で構(gòu)成されている必要があります。
alpha_dash
このルールを検証する値は、完全に文字、數(shù)字、ダッシュ、または下線文字で構(gòu)成されている必要があります。
alpha_num
このルールを検証する値は、完全に文字と數(shù)字で構(gòu)成されている必要があります。
before:date
このルールの値が指定された日付より前である必要があることを検証します。日付は PHP 関數(shù) strtotime を通じて渡されます。
between:min,max
このルールの値が指定された最小値と最大値の間にある必要があることを検証します。文字列、數(shù)値、ファイルはサイズ ルールを使用して比較されます。
confirmed
この検証ルールの値は、foo_confirmationの値と同じである必要があります。たとえば、このルールで検証する必要があるフィールドがパスワードの場合、入力に同じパスワード確認(rèn)フィールドが存在する必要があります。
date
PHP 関數(shù) strtotime に従って、このルールの値が有効な日付である必要があることを検証します。
date_format:format
PHP 関數(shù) date_parse_from_format に従って、このルールの値が指定された形式の形式に準(zhǔn)拠する必要があることを検証します。
Different:field
このルールの値が指定されたフィールドの値と異なる必要があることを検証します。
email
このルールの値が有効な電子メール アドレスである必要があることを検証します。
exists:table,column
このルールの値が指定されたデータベースのテーブルに存在する必要があることを確認(rèn)します。
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
このルールの値が整數(shù)である必要があることを検証します。
このルールの値が有効な IP アドレスである必要があることを確認(rèn)してください。
max:value
このルールの値が最大値未満である必要があることを確認(rèn)します。文字列、數(shù)値、ファイルはサイズ ルールを使用して比較されます。
mimes:foo,bar,...
このルールが検証されるファイルの MIME タイプは、指定されたリストに含まれている必要があります。
MIME 規(guī)則的基礎(chǔ)使用
'photo' => 'mimes:jpeg,bmp,png'
min:value
驗(yàn)證此規(guī)則的值必須大于最小值 value。字符串、數(shù)字以及文件都將使用大小規(guī)則進(jìn)行比較。
not_in:foo,bar,...
驗(yàn)證此規(guī)則的值必須在給定的列表中不存在。
numeric
驗(yàn)證此規(guī)則的值必須是一個(gè)數(shù)字。
regex:pattern
驗(yàn)證此規(guī)則的值必須符合給定的正則表達(dá)式。
注意: 當(dāng)使用 regex 模式的時(shí)候,有必要使用數(shù)組指定規(guī)則,而不是管道分隔符,特別是正則表達(dá)式中包含一個(gè)管道字符的時(shí)候。
required
驗(yàn)證此規(guī)則的值必須在輸入數(shù)據(jù)中存在。
required_if:field,value
當(dāng)指定的域?yàn)槟硞€(gè)值的時(shí)候,驗(yàn)證此規(guī)則的值必須存在。
required_with:foo,bar,...
僅當(dāng)指定的域存在的時(shí)候,驗(yàn)證此規(guī)則的值必須存在。
required_without:foo,bar,...
僅當(dāng)指定的域不存在的時(shí)候,驗(yàn)證此規(guī)則的值必須存在。
same:field
驗(yàn)證此規(guī)則的值必須與給定域的值相同。
size:value
驗(yàn)證此規(guī)則的值的大小必須與給定的 value 相同。對(duì)于字符串,value 代表字符的個(gè)數(shù);對(duì)于數(shù)字,value 代表它的整數(shù)值,對(duì)于文件,value 代表文件以KB為單位的大小。
unique:table,column,except,idColumn
驗(yàn)證此規(guī)則的值必須在給定的數(shù)據(jù)庫的表中唯一。如果 column 沒有被指定,將使用該域的名字。
Unique 規(guī)則的基礎(chǔ)使用
'email' => 'unique:users' 指定列名 'email' => 'unique:users,email_address' 強(qiáng)制忽略一個(gè)給定的 ID 'email' => 'unique:users,email_address,10'
url
驗(yàn)證此規(guī)則的值必須是一個(gè)合法的 URL。
定制錯(cuò)誤消息
如果有需要,您可以使用定制的錯(cuò)誤消息代替默認(rèn)的消息。這里有好幾種定制錯(cuò)誤消息的方法。
傳遞定制消息到驗(yàn)證器
$messages = array( 'required' => 'The :attribute field is required.', ); $validator = Validator::make($input, $rules, $messages);
注意: :attribute 占位符將被實(shí)際的進(jìn)行驗(yàn)證的域的名字代替,您也可以在錯(cuò)誤消息中使用其他占位符。
其他驗(yàn)證占位符
$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', );
有些時(shí)候,您可能希望只對(duì)一個(gè)指定的域指定定制的錯(cuò)誤消息:
對(duì)一個(gè)指定的域指定定制的錯(cuò)誤消息
$messages = array( 'email.required' => 'We need to know your e-mail address!', );
在一些情況下,您可能希望在一個(gè)語言文件中指定錯(cuò)誤消息而不是直接傳遞給 Validator。為了實(shí)現(xiàn)這個(gè)目的,請(qǐng)?jiān)?app/lang/xx/validation.php 文件中添加您的定制消息到 custom 數(shù)組。
在語言文件中指定錯(cuò)誤消息
'custom' => array( 'email' => array( 'required' => 'We need to know your e-mail address!', ), ),
定制驗(yàn)證規(guī)則
Laravel 提供了一系列的有用的驗(yàn)證規(guī)則;但是,您可能希望添加自己的驗(yàn)證規(guī)則。其中一種方法是使用 Validator::extend 函數(shù)注冊(cè)定制的驗(yàn)證規(guī)則:
注冊(cè)一個(gè)定制的驗(yàn)證規(guī)則
Validator::extend('foo', function($attribute, $value, $parameters) { return $value == 'foo'; });
注意: 傳遞給 extend 函數(shù)的規(guī)則的名字必須符合 "snake cased" 命名規(guī)則。
定制的驗(yàn)證器接受三個(gè)參數(shù):待驗(yàn)證屬性的名字、待驗(yàn)證屬性的值以及傳遞給這個(gè)規(guī)則的參數(shù)。
您也可以傳遞一個(gè)類的函數(shù)到 extend 函數(shù),而不是使用閉包:
Validator::extend('foo', 'FooValidator@validate');
注意您需要為您的定制規(guī)則定義錯(cuò)誤消息。您既可以使用一個(gè)行內(nèi)的定制消息數(shù)組,也可以在驗(yàn)證語言文件中進(jìn)行添加。
您也可以擴(kuò)展 Validator 類本身,而不是使用閉包回調(diào)擴(kuò)展驗(yàn)證器。為了實(shí)現(xiàn)這個(gè)目的,添加一個(gè)繼承自 Illuminate\Validation\Validator 的驗(yàn)證器類。您可以添加在類中添加以 validate 開頭的驗(yàn)證函數(shù):
擴(kuò)展驗(yàn)證器類
<?php class CustomValidator extends Illuminate\Validation\Validator { public function validateFoo($attribute, $value, $parameters) { return $value == 'foo'; } }
下面,您需要注冊(cè)定制的驗(yàn)證器擴(kuò)展:
您需要注冊(cè)定制的驗(yàn)證器擴(kuò)展
Validator::resolver(function($translator, $data, $rules, $messages) { return new CustomValidator($translator, $data, $rules, $messages); });
當(dāng)創(chuàng)建一個(gè)定制的驗(yàn)證規(guī)則,您有時(shí)需要為錯(cuò)誤消息定義一個(gè)定制的占位符。為了實(shí)現(xiàn)它,您可以像上面那樣創(chuàng)建一個(gè)定制的驗(yàn)證器,并且在驗(yàn)證器中添加一個(gè) replaceXXX 函數(shù):
protected function replaceFoo($message, $attribute, $rule, $parameters) { return str_replace(':foo', $parameters[0], $message); }
更多Laravel框架表單驗(yàn)證詳解相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover
寫真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國語版
中國語版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)