Laravel Autres approches de validation


Exemple

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)
            ]
        ];
    }
}