Recherche…


Paramètres

Paramètre Détails
Champs obligatoires Ce champ est requis
parfois Exécuter des contrôles de validation sur un champ uniquement si ce champ est présent dans le tableau d'entrée
email L'entrée est un email valide
Valeur max La valeur d'entrée doit être inférieure à la valeur maximale
unique: nom_table_base La valeur d'entrée doit être unique dans le nom de la table de base de données fournie
accepté Oui / Oui / 1 vrai, utile pour vérifier les TOS
active_url Doit être une URL valide selon checkdnsrr
après : date Le champ en cours de validation doit fournir une valeur après la date donnée
alpha Le champ en cours de validation doit être entièrement alphabétique.
alpha_dash Le champ en cours de validation peut comporter des caractères alphanumériques, ainsi que des tirets et des traits de soulignement.
alpha_num Le champ en cours de validation doit être entièrement composé de caractères alphanumériques.
tableau Doit être un tableau PHP
avant : date Le champ doit être une valeur sous la date donnée
entre: min, max La valeur d'entrée doit être comprise entre les valeurs minimum (min) et maximum (max)
booléen Le champ en cours de validation doit pouvoir être converti en booléen. Les entrées acceptées sont true , false , 1 , 0 , "1" et "0" .
confirmé Le champ en cours de validation doit avoir un champ correspondant de foo_confirmation . Par exemple, si le champ en cours de validation est un password , un champ password_confirmation correspondant doit être présent dans l'entrée.
rendez-vous amoureux Le champ en cours de validation doit être une date valide selon la fonction PHP strtotime .
entier Le champ en cours de validation doit être un entier
chaîne Le champ en cours de validation doit être un type de chaîne .

Exemple de base

Vous pouvez valider les données de demande à l'aide de la méthode validate (disponible dans le contrôleur de base, fournie par le trait ValidatesRequests ).

Si les règles passent, votre code continuera à s'exécuter normalement; cependant, si la validation échoue, une réponse d'erreur contenant les erreurs de validation sera automatiquement renvoyée:

  • pour les demandes de formulaire HTML typiques, l'utilisateur sera redirigé vers la page précédente, le formulaire conservant les valeurs soumises
  • pour les requêtes qui attendent une réponse JSON, une réponse HTTP avec le code 422 sera générée

Par exemple, dans votre UserController , vous pouvez enregistrer un nouvel utilisateur dans la méthode store , ce qui nécessite une validation avant l'enregistrement.

/**
 * @param  Request  $request
 * @return Response
 */
public function store(Request $request) {
    $this->validate($request, [
        'name' => 'required',
        'email' => 'email|unique:users|max:255'
    ],
    // second array of validation messages can be passed here
    [
        'name.required' => 'Please provide a valid name!',
        'email.required' => 'Please provide a valid email!',
    ]);

    // The validation passed
}

Dans l'exemple ci-dessus, nous validons que le champ de name existe avec une valeur non vide. Deuxièmement, nous vérifions que le champ de email a un format de courrier électronique valide, est unique dans la table de base de données "users" et a une longueur maximale de 255 caractères.

Le | Le caractère (pipe) combine différentes règles de validation pour un champ.

Parfois, vous souhaiterez peut-être arrêter l'exécution des règles de validation sur un attribut après le premier échec de validation. Pour ce faire, assignez la règle de bail à l'attribut:

$this->validate($request, [
    'name' => 'bail|required',
    'email' => 'email|unique:users|max:255'
]);

La liste complète des règles de validation disponibles se trouve dans la section des paramètres ci-dessous .

Validation de tableau

La validation des champs d'entrée de formulaire de tableau est très simple.

Supposons que vous deviez valider chaque nom, email et nom de père dans un tableau donné. Vous pouvez faire ce qui suit:

$validator = \Validator::make($request->all(), [
    'name.*'       => 'required', 
    'email.*'      => 'email|unique:users',
    'fatherName.*' => 'required'
]);

if ($validator->fails()) {
    return back()->withInput()->withErrors($validator->errors());
}

Laravel affiche les messages par défaut pour la validation. Toutefois, si vous souhaitez des messages personnalisés pour les champs basés sur des tableaux, vous pouvez ajouter le code suivant:

[
    'name.*' => [
        'required' => 'Name field is required',
    ],
    'email.*' => [
        'unique'   => 'Unique Email is required',
    ],
    'fatherName.*' => [
        'required' => 'Father Name required',
    ]
]

Votre code final ressemblera à ceci:

$validator = \Validator::make($request->all(), [
    'name.*'       => 'required', 
    'email.*'      => 'email|unique:users',
    'fatherName.*' => 'required',
], [
    'name.*'       => 'Name Required',
    'email.*'      => 'Unique Email is required',
    'fatherName.*' => 'Father Name required',
]);

if ($validator->fails()) {
    return back()->withInput()->withErrors($validator->errors());
}

Autres approches de validation

1) Validation de la demande de formulaire

Vous pouvez créer une "demande de formulaire" pouvant contenir la logique d'autorisation, les règles de validation et les messages d'erreur pour une demande particulière dans votre application.

La commande CLI de make:request Artisan génère la classe et la place dans le répertoire app/Http/Requests :

php artisan make:request StoreBlogPostRequest

La méthode authorize peut être remplacée par la logique d'autorisation pour cette requête:

public function authorize()
{        
    return $this->user()->can('post');
}

La méthode rules peut être remplacée par les règles spécifiques à cette requête:

public function rules()
{
    return [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ];
}

La méthode des messages peut être remplacée par les messages spécifiques à cette requête:

public function messages()
{
    return [
        'title.required' => 'A title is required',
        'title.unique' => 'There is another post with the same title',
        'title.max' => 'The title may not exceed :max characters',
        'body.required' => 'A message is required',
    ];
}

Pour valider la requête, il suffit d'indiquer la classe de requête spécifique sur la méthode de contrôleur correspondante. Si la validation échoue, une réponse d'erreur sera renvoyée.

public function store(StoreBlogPostRequest $request)
{
    // validation passed
}

2) Création manuelle de validateurs

Pour plus de flexibilité, vous pouvez créer un validateur manuellement et gérer directement la validation échouée:

<?php    
namespace App\Http\Controllers;

use Validator;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class PostController extends Controller
{
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ]);

        if ($validator->fails()) {
            return redirect('post/create')
                    ->withErrors($validator)
                    ->withInput();
        }

        // Store the blog post...
    }
}

2) Création fluide de règles

De temps en temps, vous pourriez avoir besoin de créer des règles uniques à la volée, travailler avec la méthode boot() dans un fournisseur de services peut être exagéré, à partir de Laravel 5.4, vous pouvez créer de nouvelles règles avec la classe Rule .

Par exemple, nous allons travailler avec UserRequest pour savoir quand vous voulez insérer ou mettre à jour un utilisateur. Pour l'instant, nous voulons un nom et l'adresse e-mail doit être unique. Le problème avec l’utilisation de la règle unique est que si vous modifiez un utilisateur, il se peut qu’il conserve le même courrier électronique. Vous devez donc exclure l’utilisateur actuel de la règle. L'exemple suivant montre comment vous pouvez facilement le faire en utilisant la nouvelle classe Rule .

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;

class UserRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules(Request $request)
    {
        $id = $request->route()->getParameter('user');

        return [
            'name'           =>  'required',
            
            // Notice the value is an array and not a string like usual
            'email'         =>  [
                'required',
                Rule::unique('users')->ignore($id)
            ]
        ];
    }
}

Classe de demande de formulaire unique pour POST, PUT, PATCH

Suivant l'exemple de 'Validation de demande de formulaire' , la même classe de demande peut être utilisée pour POST , PUT , PATCH ce qui vous PATCH de créer une autre classe en utilisant les mêmes validations / similaires. Cela est pratique si vous avez des attributs uniques dans votre table.

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules() {
    switch($this->method()) {
        case 'GET':
        case 'DELETE':
            return [];
        case 'POST':
            return [
                'name'     => 'required|max:75|unique',
                'category' => 'required',
                'price'    => 'required|between:0,1000',
            ];
        case 'PUT':
        case 'PATCH':
            return [
                'name'     => 'required|max:75|unique:product,name,' . $this->product,
                'category' => 'required',
                'price'    => 'required|between:0,1000',
            ];
        default:break;
    }
}

En partant du haut, notre instruction switch va examiner le type de méthode de la requête ( GET , DELETE , POST , PUT , PATCH ).

Selon la méthode, renverra le tableau de règles défini. Si vous avez un champ unique, tel que le champ name de l'exemple, vous devez spécifier un identifiant particulier pour que la validation soit ignorée.

'field_name' => 'unique:table_name,column_name,' . $idToIgnore`

Si vous avez une clé primaire étiquetée autrement que id , vous spécifiez la colonne clé primaire comme quatrième paramètre.

'field_name' => 'unique:table_name,column_name,' . $idToIgnore . ',primary_key_column'

Dans cet exemple, nous utilisons PUT et transmettons à la route ( admin/products/{product} ) la valeur de l'ID du produit. Donc, $this->product sera égal à l' id à ignorer.

Maintenant, vos règles de validation PUT|PATCH et POST ne doivent pas nécessairement être identiques. Définissez votre logique en fonction de vos besoins. Cette technique vous permet de réutiliser les messages personnalisés que vous avez peut-être définis dans la classe de demande de formulaire personnalisée.

Messages d'erreur

Personnalisation des messages d'erreur

Les fichiers /resources/lang/[lang]/validation.php contiennent les messages d'erreur à utiliser par le validateur. Vous pouvez les modifier selon vos besoins.

La plupart d'entre eux ont des espaces réservés qui seront automatiquement remplacés lors de la génération du message d'erreur.

Par exemple, dans 'required' => 'The :attribute field is required.' , l'espace réservé :attribute sera remplacé par le nom du champ (vous pouvez également personnaliser la valeur d'affichage de chaque champ du tableau d' attributes du même fichier).

Exemple

configuration du message:

'required' => 'Please inform your :attribute.',
//...
'attributes => [
    'email' => 'E-Mail address'
]

règles:

`email' => `required`

message d'erreur résultant:

"S'il vous plaît informer votre adresse e-mail."


Personnalisation des messages d'erreur dans une classe Request

La classe Request a accès à une méthode messages() qui devrait renvoyer un tableau. Elle peut être utilisée pour remplacer les messages sans avoir à entrer dans les fichiers lang. Par exemple, si nous avons une validation personnalisée file_exists vous pouvez envoyer des messages comme ci-dessous.

class SampleRequest extends Request {

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'image' =>  'required|file_exists'
        ];
    }

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    public function messages()
    {
        return [
            'image.file_exists' =>  'That file no longer exists or is invalid'
        ];
    }

}

Affichage des messages d'erreur

Les erreurs de validation sont flashées sur la session et sont également disponibles dans la variable $errors , qui est automatiquement partagée avec toutes les vues.

Exemple d'affichage des erreurs dans une vue Blade:

@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

Règles de validation personnalisées

Si vous souhaitez créer une règle de validation personnalisée, vous pouvez le faire par exemple dans la méthode de boot d'un fournisseur de services, via la façade Validator.

<?php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Validator;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Validator::extend('starts_with', function($attribute, $value, $parameters, $validator) {
            return \Illuminate\Support\Str::startsWith($value, $parameters[0]);
        });

        Validator::replacer('starts_with', function($message, $attribute, $rule, $parameters) {
            return str_replace(':needle', $parameters[0], $message);
        });
    }
}

La méthode extend prend une chaîne qui sera le nom de la règle et une fonction qui à son tour recevra le nom de l'attribut, la valeur en cours de validation, un tableau des paramètres de la règle et l'instance du validateur, et devrait indiquer si la validation passe. Dans cet exemple, nous vérifions si la chaîne de valeur commence par une sous-chaîne donnée.

Le message d'erreur pour cette règle personnalisée peut être défini comme d'habitude dans le fichier /resources/lang/[lang]/validation.php et peut contenir des espaces réservés, par exemple, pour les valeurs de paramètres:

'starts_with' => 'The :attribute must start with :needle.'

La méthode replacer prend une chaîne qui est le nom de la règle et une fonction qui à son tour recevra le message d'origine (avant remplacement), le nom de l'attribut, le nom de la règle et un tableau des paramètres de la règle. et devrait retourner le message après avoir remplacé les espaces réservés selon les besoins.

Utilisez cette règle comme toute autre:

$this->validate($request, [
    'phone_number' => 'required|starts_with:+'
]);


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow