Laravel validaciones

Las validaciones se utilizan en una aplicación web, principalmente en campos de entrada de datos, que a través un control de validación, permite o deniega al usuario introducir información, y en caso de error informar de porqué no son válidos.

Índice
  1. Validación en el controlador o componente
  2. Mostar mensajes error de validación
  3. Valicaciones con registros únicos
  4. Reglas de validaciones más habituales

Validación en el controlador o componente

Hay que definir por una parte la propiedad o variable, y por otra utilizar el método que valida.

Crear propiedad de validación

Crear una propiedad protected de tipo array llamada rules, donde cada campo se le define las restricciones.

Cada parte del formulario se identifica con su nombre y se le asigna las restricciones, que en caso de ser más de una, irá separado por la barra vertical restricción1|restricción2.

protected $rules = [
'title' => 'required|max:100',
'content' => 'required|min:10'
];

Validar con el método validate

Para validar las restricciones definidas en la propiedad rules, hay que llamar al método validate. Si pasa las restricciones devuelve true y sigue con el resto de ejecución de código, pero si no son válidas, devuelve false y ya no ejecuta más código.

Por ejemplo para guardar datos de un formulario, se define una función save que primero valida y si pasa guarda en la base de datos.

public function save(){
$this->validate();
Modelo::create([
'title' => $this->title,
'content' => $this->content
]);
}

Mostar mensajes error de validación

En caso de que la validación detecte que los datos introducidos no son válidos, envía un mensaje, y éste se puede mostrar en la vista para que el usuario sepa porqué no puede confirmar el formulario.

Directiva blade error

En la vista del controlador hay que utilizar la directiva de blade llamada error, para que el mensaje de error de validación se muestre.

Esta directiva se abre con una arroba y la palabra error, y se cierra con arroba y la palabra enderror, pasando por parámetro el nombre del campo que se valida. Hay que situarlo en el mismo div justo debajo de donde aparece el campo. El mensaje se muestra con la propiedad message.

En este ejemplo con un input de jetstream

<div class="mb-4">
<x-jet-label value="Titulo"/>
<x-jet-input type="text" class="w-full" wire:model.defer="title"/>
@error('title')
<span>
{{$message}}
<span>
@enderror

</div>

Mostrar error con jetstream input-error

Para tener un código más optimizado, se puede utilizar directamente el componente de jetstream input-error, que hace lo mismo que el código anterior, pero la vista queda con una mejor estructura y código más limpio.

El fichero es el siguiente

resources\views\vendor\jetstream\components\input-error.blade.php

Y en la vista se llama como un componente de jetstream

<x-jet-input-error for="title" />

mensaje error validacion

Mostrar error en tiempo real

Los errores se muestran por defecto al enviar el formulario, pero es posible mostrar en cuanto incumpla la validación.

Por ejemplo al tener un máximo de caracteres, no permitir escribir a usuario sabiendo que se le va a denegar.

Para ello hay que utilizar en el controlador la funcion updated, que se actualiza cada vez que el usuario modifique una de las propiedades definidas. Se pide por parámetro el nombre del campo, y dentro se utiliza el método validateOnly, pasando por parámetro el campo requerido.

public function updated($propertyName){
$this->validateOnly($propertyName);
}

Importante de que si en la vista está configurado el método wire:model.defer no va a hacer caso, porque éste evita precisamente que se refresque la propiedad al interactuar con él.

<div class="mb-4">
<x-jet-label value="Titulo"/>
<x-jet-input type="text" class="w-full" wire:model.defer="title"/>
<x-jet-input-error for="title" />
</div>

Valicaciones con registros únicos

Un ejemplo de validar registros únicos y excepciones, es al intentar grabar un post y la url o slug ya existe. Entonces no deja guardar porque no pasa la validación.

Es facil saltarse esa validación indicando la excepción:
required en tabla courses, exceptuando el id o slug

$request->validate([
            'title' => 'required',
            'slug' => 'required|unique:courses,slug,' .$course->id,
            'subtitle' => 'required',
            'file' => 'image'
        ]);

Reglas de validaciones más habituales

  • required - No permite dejar el campo en blanco.
  • min:50 - Se debe introducir un mínimo de caracteres, poniendo el número después separado de dos puntos, en este ejemplo son mínimo de 50.
  • max:100 - Sólo se puede introducir un máximo de caracteres, poniendo el número después separado de dos puntos, en este ejemplo son mínimo de 100.
  • numeric - caracteres numéricos
  • unique:tabla,slug - En base de datos sea único en la tabla indicada, y sea slug. Slug es el formato url amigable que identifica una página, que va indicado después de dominio. Por ejemplo este post que estás leyendo su URL es https://blogdeinformatica.info/laravel-validaciones/ donde su slug es laravel-validaciones
  • image|max:1024 - que sea imagen con un tamaño máximo de 1024 Kb
  • in:1,2 - que el valor sea únicamente 1 o 2.
  • file - En formularios con subida de ficheros se puede especificar el tipo de fichero que se permite, por ejemplo solo imagens. 'file' => 'image'. En la vista también se puede filtrar por ejemplo imágenes ['accept' => 'image/*'], pero se necesitarían los dos, tanto en el controlador como en el componente, para que el usuario no suba ficheros no permitidos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir