ホームページ  >  記事  >  php教程  >  Laravelフレームワークフォーム検証の詳細説明

Laravelフレームワークフォーム検証の詳細説明

高洛峰
高洛峰オリジナル
2016-12-27 10:55:331305ブラウズ

基本的な検証例

$validator = Validator::make(
array('name' => 'Dayle'),
array('name' => 'required|min:5')
);

make 関数に渡される最初のパラメータは検証対象のデータであり、2 番目のパラメータはデータに適用する必要がある検証ルールです。

複数の検証ルールは、「|」文字で区切るか、配列の個別の要素として区切ることができます。

配列を介して検証ルールを指定する

$validator = Validator::make(
array('name' => 'Dayle'),
array('name' => array('required', 'min:5'))
);

Validator インスタンスが作成されたら、失敗 (または合格) 関数を使用してこの検証を実行できます。

if ($validator->fails())
{
// The given data did not pass validation
}

検証が失敗した場合は、バリデーターからエラー メッセージを取得できます。

$messages = $validator->messages();

failed 関数を使用して、エラー メッセージなしで検証に失敗したルールの配列を取得することもできます。

$failed = $validator->failed();

ファイル検証

Validator クラスは、サイズ、MIME など、ファイルを検証するためのいくつかの検証ルールを提供します。ファイルを検証するときは、他の検証と同様に、ファイルをバリデーターに渡すことができます。

エラーメッセージが付属

Validator インスタンスでメッセージ関数を呼び出すと、エラー メッセージを処理するための便利な関数が多数含まれる MessageBag インスタンスが取得されます。

ドメインの最初のエラーメッセージを取得する

echo $messages->first('email');

ドメインのすべてのエラーメッセージを取得する

foreach ($messages->get('email') as $message)
{
//
}

すべてのドメインのすべてのエラーメッセージを取得する

foreach ($messages->all() as $message)
{
//
}

ドメインにメッセージが存在するかどうかを確認する

if ($messages->has('email'))
{
//
}

特定のエラーを取得するformat Message

echo $messages->first(&#39;email&#39;, &#39;<p>:message</p>&#39;);

注: デフォルトでは、メッセージはブートストラップ互換の構文を使用してフォーマットされます。

すべてのエラー メッセージを何らかの形式で取得する

  foreach ($messages->all(&#39;<li>:message</li>&#39;) as $message)
  {
  //
  }

エラー メッセージとビュー

検証を実行したら、エラー メッセージをビューにフィードバックする簡単な方法が必要です。これは Lavavel で簡単に処理できます。例として次のルートを考えます:

Route::get(&#39;register&#39;, function()
{
return View::make(&#39;user.register&#39;);
});
Route::post(&#39;register&#39;, function()
{
$rules = array(...);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails())
{
return Redirect::to(&#39;register&#39;)->withErrors($validator);
}
});

検証が失敗した場合、withErrors 関数を使用して Validator インスタンスを Redirect に渡すことに注意してください。この関数は、セッションに保存されたエラー メッセージを更新して、次のリクエストで使用できるようにします。


ただし、GET ルート内のルートにエラー メッセージを明示的にバインドする必要がないことに注意してください。これは、Laravel が常にセッションのエラーをチェックし、エラーが利用可能な場合は自動的にビューにバインドするためです。したがって、すべてのリクエストについて、$errors 変数は常にすべてのビューで使用できるため、$errors が常に定義されており、安全に使用できると便利に想定できます。 $errors 変数は、MessageBag クラスのインスタンスになります。

そのため、ジャンプ後、ビューで自動的にバインドされた $errors 変数を使用できます:

<?php echo $errors->first(&#39;email&#39;); ?>

利用可能な検証ルール

以下は、利用可能なすべての検証ルールとその関数のリストです:

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 である必要があります。これは、利用規約への同意を確認する場合に役立ちます。

active_url

PHP 関数 checkdnsrr に従って、このルールの値が有効な URL である必要があることを検証します。

after:date

このルールの値が指定された日付より後でなければならないことを検証します。日付は PHP 関数 strtotime を通じて渡されます。

alpha
このルールを検証する値は、完全にアルファベット文字で構成されている必要があります。

alpha_dash
このルールを検証する値は、完全に文字、数字、ダッシュ、または下線文字で構成されている必要があります。

alpha_num
このルールを検証する値は、完全に文字と数字で構成されている必要があります。

before:date
このルールの値が指定された日付より前である必要があることを検証します。日付は PHP 関数 strtotime を通じて渡されます。

between:min,max
このルールの値が指定された最小値と最大値の間にある必要があることを検証します。文字列、数値、ファイルはサイズ ルールを使用して比較されます。

confirmed
この検証ルールの値は、foo_confirmationの値と同じである必要があります。たとえば、このルールで検証する必要があるフィールドがパスワードの場合、入力に同じパスワード確認フィールドが存在する必要があります。

date
PHP 関数 strtotime に従って、このルールの値が有効な日付である必要があることを検証します。

date_format:format
PHP 関数 date_parse_from_format に従って、このルールの値が指定された形式の形式に準拠する必要があることを検証します。

Different:field
このルールの値が指定されたフィールドの値と異なる必要があることを検証します。

email
このルールの値が有効な電子メール アドレスである必要があることを検証します。

exists:table,column
このルールの値が指定されたデータベースのテーブルに存在する必要があることを確認します。

Exists ルールの基本は、

&#39;state&#39; => &#39;exists:states&#39;

列名を指定する

&#39;state&#39; => &#39;exists:states,abbreviation&#39;

を使用することです。さらに条件を指定することもでき、「where」の形式でクエリに追加されます。

&#39;email&#39; => &#39;exists:staff,email,account_id,1&#39;

image
このルールを検証する値は画像 (jpeg、png、bmp、または gif) である必要があります。

in:foo,bar,...

このルールの値が指定されたリストに存在する必要があることを検証します。

integer

このルールの値が整数である必要があることを検証します。


このルールの値が有効な IP アドレスである必要があることを確認してください。

max:value

このルールの値が最大値未満である必要があることを確認します。文字列、数値、ファイルはサイズ ルールを使用して比較されます。

mimes:foo,bar,...

このルールが検証されるファイルの MIME タイプは、指定されたリストに含まれている必要があります。

  MIME 规则的基础使用

&#39;photo&#39; => &#39;mimes:jpeg,bmp,png&#39;

min:value
  验证此规则的值必须大于最小值 value。字符串、数字以及文件都将使用大小规则进行比较。

not_in:foo,bar,...

  验证此规则的值必须在给定的列表中不存在。

numeric

  验证此规则的值必须是一个数字。

regex:pattern

  验证此规则的值必须符合给定的正则表达式。

  注意: 当使用 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 规则的基础使用

&#39;email&#39; => &#39;unique:users&#39;
指定列名
&#39;email&#39; => &#39;unique:users,email_address&#39;
强制忽略一个给定的 ID
&#39;email&#39; => &#39;unique:users,email_address,10&#39;

url

  验证此规则的值必须是一个合法的 URL。

  定制错误消息

  如果有需要,您可以使用定制的错误消息代替默认的消息。这里有好几种定制错误消息的方法。

  传递定制消息到验证器

$messages = array(
 &#39;required&#39; => &#39;The :attribute field is required.&#39;,
 );
 $validator = Validator::make($input, $rules, $messages);

注意: :attribute 占位符将被实际的进行验证的域的名字代替,您也可以在错误消息中使用其他占位符。

其他验证占位符

  $messages = array(
  &#39;same&#39; => &#39;The :attribute and :other must match.&#39;,
  &#39;size&#39; => &#39;The :attribute must be exactly :size.&#39;,
  &#39;between&#39; => &#39;The :attribute must be between :min - :max.&#39;,
  &#39;in&#39; => &#39;The :attribute must be one of the following types: 
:values&#39;,
  );

  有些时候,您可能希望只对一个指定的域指定定制的错误消息:

  对一个指定的域指定定制的错误消息

$messages = array(
&#39;email.required&#39; => &#39;We need to know your e-mail address!&#39;,
);

在一些情况下,您可能希望在一个语言文件中指定错误消息而不是直接传递给 Validator。为了实现这个目的,请在 app/lang/xx/validation.php 文件中添加您的定制消息到 custom 数组。

在语言文件中指定错误消息

&#39;custom&#39; => array(
&#39;email&#39; => array(
&#39;required&#39; => &#39;We need to know your e-mail address!&#39;,
),
),

定制验证规则

Laravel 提供了一系列的有用的验证规则;但是,您可能希望添加自己的验证规则。其中一种方法是使用 Validator::extend 函数注册定制的验证规则:

注册一个定制的验证规则

Validator::extend(&#39;foo&#39;, function($attribute, $value, $parameters)
{
return $value == &#39;foo&#39;;
});

注意: 传递给 extend 函数的规则的名字必须符合 "snake cased" 命名规则。

  定制的验证器接受三个参数:待验证属性的名字、待验证属性的值以及传递给这个规则的参数。

  您也可以传递一个类的函数到 extend 函数,而不是使用闭包:

  Validator::extend(&#39;foo&#39;, &#39;FooValidator@validate&#39;);

  注意您需要为您的定制规则定义错误消息。您既可以使用一个行内的定制消息数组,也可以在验证语言文件中进行添加。

  您也可以扩展 Validator 类本身,而不是使用闭包回调扩展验证器。为了实现这个目的,添加一个继承自 Illuminate\Validation\Validator 的验证器类。您可以添加在类中添加以 validate 开头的验证函数:

扩展验证器类

<?php
class CustomValidator extends Illuminate\Validation\Validator {
public function validateFoo($attribute, $value, $parameters)
{
return $value == &#39;foo&#39;;
}
}

下面,您需要注册定制的验证器扩展:

您需要注册定制的验证器扩展

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(&#39;:foo&#39;, $parameters[0], $message);
}

更多Laravel框架表单验证详解相关文章请关注PHP中文网!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。