Laravel 5 viene con un fantástico sistema de validación de datos con un montón de reglas de validación predefinidas que podemos ver en https://laravel.com/docs/5.0/validation#available-validation-rules pero lo normal es que necesitemos crear nuestras propias reglas de validación para ciertos campos. En mi caso surgió la necesidad de validar que las contraseñas cumplieran ciertas reglas (que tengan al menos una mayúscula, minúscula, número y una longitud entre 6 y 10 caracteres). Para ello en el fichero app\Providers\AppServiceProvaider.php, dentro de la función boot me cree una extensión del validador de la siguiente forma:
namespace MiProyecto\Providers; use Illuminate\Support\ServiceProvider; use Validator; // añadir esta línea, importante class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { // la validación que queremos crear Validator::extend('contrasena_segura', function($attribute, $value, $parameters, $validator) { return (preg_match('/(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9\s]{6,10})$/', $value) == 1)?true:false; }); }
Luego tenemos que definir el mensaje de error que se va a mostrar en caso de error, lo cual podremos hacer en el fichero validation.php del idioma que estemos usando (resources\lang\es\validation.php en mi caso):
'contrasena_segura' => 'La contraseña debe tener entre 6 y 10 caracteres, y contener alguna mayúscula, minúscula y número',
Y ya lo podremos usar como cualquier otro tipo de validación:
$validator = Validator::make($request->input(), [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users,email,'.$request->input('id'), 'password' => 'required|contrasena_segura', 'role' => 'required|in:superadmin,admin,user' ]);
0 Comentarios.