Las reglas de validación personalizadas (o customizadas) de Laravel 5.5 son un recurso muy útil, y son especialmente relevantes si queremos definir ciertas condiciones para un atributo y reusarlas en otros lugares de nuestra aplicación.
Primero que todo, si quieres especificar tus propias validaciones, puedes usar el siguiente comando para generar un objeto que extiende el contrato Rule:
1 | php artisan make:rule NombreDeLaRegla |
Como resultado, se creará un directorio llamado Rules y el archivo creado dentro de este, se usa para definir las reglas y el mensaje que se debe devolver al usuario en caso de que la validación falle. En consecuencia, en App\Rules tendríamos una clase con el método passes()
, donde definimos las condiciones para que la validación sea exitosa , y el método message()
, donde se define el mensaje.
De esta forma, supongamos que queremos validar que un campo en particular tenga exactamente cinco caracteres, lo primero que haríamos sería crear la regla con:
1 | php artisan make:rule FiveCharacters |
Así, en nuestro ejemplo, la clase generada quedaría como sigue:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | // FiveCharacters.php namespace App\Rules; use Illuminate\Contracts\Validation\Rule; class FiveCharacters implements Rule { /** * Create a new rule instance. * * @return void */ public function __construct() { // } /** * Determine if the validation rule passes. * * @param string $attribute * @param mixed $value * @return bool */ public function passes($attribute, $value) { return strlen($value) === 5; } /** * Get the validation error message. * * @return string */ public function message() { return 'The :attribute must be 5 characters'; } } |
De esta forma y si estamos realizando la validación en el controlador, usaríamos la regla como en el siguiente ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // ItemController.php use App\Rules\FiveCharacters; /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $items = $request->validate([ 'name' => [new FiveCharacters], ]); $items->save(); return back(); } |
En conclusión, podemos usar reglas de validación personalizadas en Laravel 5.5 y reusarlas en otro controlador o similarmente, en un Form Request. También puedes ver la documentación oficial sobre Using Rule Objects y leer el artículo Reglas de Validación personalizadas en este blog.