Maison > php教程 > PHP开发 > le corps du texte

Explication détaillée de la validation du formulaire du framework Laravel

高洛峰
Libérer: 2016-12-27 10:55:33
original
1304 Les gens l'ont consulté

Exemple de vérification de base

$validator = Validator::make(
array('name' => 'Dayle'),
array('name' => 'required|min:5')
);
Copier après la connexion

Le premier paramètre transmis à la fonction make est les données à vérifier, et le deuxième paramètre est la règle de vérification qui doit être appliquée aux données.

Plusieurs règles de validation peuvent être séparées par le caractère "|" ou par un seul élément d'un tableau.

Spécifiez les règles de validation via un tableau

$validator = Validator::make(
array('name' => 'Dayle'),
array('name' => array('required', 'min:5'))
);
Copier après la connexion

Une fois une instance de Validator créée, vous pouvez utiliser la fonction d'échec (ou de réussite) pour effectuer cette validation.

if ($validator->fails())
{
// The given data did not pass validation
}
Copier après la connexion

Si la validation échoue, vous pouvez recevoir un message d'erreur du validateur.

$messages = $validator->messages();
Copier après la connexion

Vous pouvez également utiliser la fonction d'échec pour obtenir un tableau de règles dont la validation a échoué sans message d'erreur.

$failed = $validator->failed();
Copier après la connexion

Validation de fichiers

La classe Validator fournit des règles de validation pour valider les fichiers, telles que la taille, les mimes, etc. Lors de la validation d'un fichier, vous pouvez le transmettre au validateur comme n'importe quelle autre validation.

Avec message d'erreur

Après avoir appelé la fonction messages sur une instance Validator, vous obtiendrez une instance MessageBag, qui possède de nombreuses fonctions pratiques pour gérer les messages d'erreur.

Obtenir le premier message d'erreur pour un domaine

echo $messages->first('email');
Copier après la connexion

Obtenir tous les messages d'erreur pour un domaine

foreach ($messages->get('email') as $message)
{
//
}
Copier après la connexion

Obtenir tous les messages d'erreur pour tous les domaines

foreach ($messages->all() as $message)
{
//
}
Copier après la connexion

Vérifier si un message existe pour un domaine

if ($messages->has('email'))
{
//
}
Copier après la connexion

Obtenir un message d'erreur dans un certain format

echo $messages->first(&#39;email&#39;, &#39;<p>:message</p>&#39;);
Copier après la connexion

Remarque : Par défaut, le message sera utilisé compatible avec la syntaxe Bootstrap pour le formatage.

Obtenez tous les messages d'erreur dans un certain format

  foreach ($messages->all(&#39;<li>:message</li>&#39;) as $message)
  {
  //
  }
Copier après la connexion

Messages d'erreur et vues

Une fois que vous avez effectué la validation, vous avez besoin d'un moyen simple de signaler les erreurs à la vue information. Cela peut être facilement géré à Lavavel. Prenons l'exemple suivant :

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);
}
});
Copier après la connexion

Notez que lorsque la validation échoue, nous utilisons la fonction withErrors pour transmettre l'instance de Validator à Redirect. Cette fonction actualisera le message d'erreur enregistré dans la Session afin qu'il soit disponible lors de la prochaine requête.


Cependant, notez que nous n'avons pas besoin de lier explicitement le message d'erreur à la route dans la route GET. En effet, Laravel vérifie toujours la session pour les erreurs et les lie automatiquement à la vue si elles sont disponibles. Ainsi, pour chaque requête, une variable $errors est toujours disponible dans toutes les vues, ce qui vous permet de supposer facilement que $errors est toujours défini et sûr à utiliser. La variable $errors sera une instance de la classe MessageBag.

Ainsi, après le saut, vous pouvez utiliser la variable $errors automatiquement liée dans la vue :

<?php echo $errors->first(&#39;email&#39;); ?>
Copier après la connexion

Règles de validation disponibles

Voici une liste complète des règles de validation disponibles règles de validation et leurs fonctions :

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)
Copier après la connexion

acceptées

Validation La valeur de cette règle doit être oui, on, ou 1. Ceci est utile pour vérifier l’accord avec les conditions d’utilisation.

active_url

Valide que la valeur de cette règle doit être une URL valide, selon la fonction PHP checkdnsrr.

after:date

Valide que la valeur de cette règle doit être postérieure à la date donnée, qui sera transmise via la fonction PHP strtotime.

alpha
Validez que la valeur de cette règle doit être entièrement composée de caractères alphabétiques.

alpha_dash
Validez que la valeur de cette règle doit être entièrement composée de lettres, de chiffres, de tirets ou de caractères soulignés.

alpha_num
La valeur validant cette règle doit être entièrement composée de lettres et de chiffres.

before:date
Valide que la valeur de cette règle doit être antérieure à la date donnée, la date sera passée via la fonction PHP strtotime.

between:min,max
  Valide que la valeur de cette règle doit être comprise entre le min et le max donnés. Les chaînes, les nombres et les fichiers sont comparés à l'aide de règles de taille.

confirmé
La valeur de cette règle de validation doit être la même que la valeur de foo_confirmation. Par exemple, si le champ qui doit être validé pour cette règle est le mot de passe, il doit y avoir un champ password_confirmation identique dans l'entrée.

date
Valide que la valeur de cette règle doit être une date valide, selon la fonction PHP strtotime.

date_format:format
Valide que la valeur de cette règle doit être conforme au format du format donné, selon la fonction PHP date_parse_from_format.

différent:field
  Valide que la valeur de cette règle doit être différente de la valeur du champ spécifié.

email
Validez que la valeur de cette règle doit être une adresse email valide.

exists:table,column
Vérifiez que la valeur de cette règle doit exister dans la table de la base de données spécifiée.

La base de la règle Exists est d'utiliser

&#39;state&#39; => &#39;exists:states&#39;
Copier après la connexion

Spécifiez le nom de la colonne

&#39;state&#39; => &#39;exists:states,abbreviation&#39;
Copier après la connexion

Vous pouvez également spécifier plus de conditions, qui seront ajoutées dans le forme de requête "où".

&#39;email&#39; => &#39;exists:staff,email,account_id,1&#39;
Copier après la connexion

image
La valeur validant cette règle doit être une image (jpeg, png, bmp ou gif).

in:foo,bar,...

Valide que la valeur de cette règle doit exister dans la liste donnée.

entier

Validez que la valeur de cette règle doit être un entier.


Vérifiez que la valeur de cette règle doit être une adresse IP valide.

max:value

Validez que la valeur de cette règle doit être inférieure à la valeur maximale. Les chaînes, les nombres et les fichiers sont comparés à l'aide de règles de taille.

Mimes:foo,bar,...

Le type MIME du fichier par rapport auquel cette règle est validée doit être dans la liste donnée.

  MIME 规则的基础使用

&#39;photo&#39; => &#39;mimes:jpeg,bmp,png&#39;
Copier après la connexion

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;
Copier après la connexion

url

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

  定制错误消息

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

  传递定制消息到验证器

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

注意: :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;,
  );
Copier après la connexion

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

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

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

在一些情况下,您可能希望在一个语言文件中指定错误消息而不是直接传递给 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;,
),
),
Copier après la connexion

定制验证规则

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

注册一个定制的验证规则

Validator::extend(&#39;foo&#39;, function($attribute, $value, $parameters)
{
return $value == &#39;foo&#39;;
});
Copier après la connexion

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

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

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

  Validator::extend(&#39;foo&#39;, &#39;FooValidator@validate&#39;);
Copier après la connexion

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

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

扩展验证器类

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

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

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

Validator::resolver(function($translator, $data, $rules, $messages)
{
return new CustomValidator($translator, $data, $rules, $messages);
});
Copier après la connexion

  当创建一个定制的验证规则,您有时需要为错误消息定义一个定制的占位符。为了实现它,您可以像上面那样创建一个定制的验证器,并且在验证器中添加一个 replaceXXX 函数:

protected function replaceFoo($message, $attribute, $rule, $parameters)
{
return str_replace(&#39;:foo&#39;, $parameters[0], $message);
}
Copier après la connexion

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

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal