1 juillet 2015

Comment ajouter de nouveaux validateurs dans Laravel 5.1 ?

Par Jean-Marc Amon

laravel-5.1lts-fr

Laravel 5.1 vient avec de nouvelles fonctionnalités comme les « Form Request » qui se revèlent être très utiles lors de la validation des formulaires. Tout ce qu’on a à faire c’est de définir les règles de validation et tout le processus de validation est géré automatiquement en arrière plan.

Pour l’exemple nous allons utiliser celui sur le site de laravel

php artisan make:request StoreBlogPostRequest

Ensuite on ajoute les règles de validation

/**
 * 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()
{
    return [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ];
}

Ensuite dans le controller, la methode chargee de traiter le formulaire doit se presenter comme suit

/**
 * Store the incoming blog post.
 *
 * @param  StoreBlogPostRequest  $request
 * @return Response
 */
public function store(StoreBlogPostRequest $request)
{
    // The incoming request is valid...
}

Il existe une liste de tous les validateurs de Laravel voyons comment en ajouter de nouveaux.

Nous allons d’abord créer un nouveau fichier nommé Validators.php dans app/Http/Validators.php.

 /**
     * Bootstrap any application services.
     *
     * @param Factory $validator
     */
    public function boot(Factory $validator)
    {
        require_once app_path() . '/Http/Validators.php';
    }

Ensuite ajouter les nouveaux validateurs comme suit

<?php


$validator->extend(
    'valid_password',
    function ($attribute, $value, $parameters) {
        return preg_match('/^[a-zA-Z0-9!@#$%/^&*()-_+=|[]{}\\?.,<>`'":;]+$/u', $value);
    }
);

$validator->extend(
    'phone_number',
    function ($attribute, $value, $parameters) {
        return 10 === strlen(preg_replace('#^.*([0-9+]{10})$#', '$1$2$3', $value));
    }
);

$validator->extend(
    'permission',
    function ($attribute, $value, $parameters) {
        return preg_match('/^[a-zA-Z]+(.{1}[a-zA-Z]+)?$/', $value);
    }
);


$validator->extend('alpha_spaces', function ($attribute, $value) {
    return preg_match('/^[pLs]+$/u', $value);
});

Il est possible maintenant d’ajouter ces nouvelles regles (valid_password, phone_number, permission, alpha_spaces) dans vos regles de validations. Mais pour afficher les messages d’erreurs correspondant il faut les ajouter dans le fichiers de langues situe dans resources/lang/validation.php

return [

...
'alpha_spaces' => 'The :attribute must contains only letters and spaces.',
'phone_number' => 'The :attribute must contains only numbers and + .',
...
];

 

 

Je rappelle que c’est une méthode parmi tant d’autres.