Validación de datos en Laravel: conveniente y potente

Publicado: 2023-05-03

Ahora más que nunca, es fundamental que los datos de sus aplicaciones sean válidos, precisos y cumplan con todos los requisitos del sistema. Aborda la necesidad de mantener la consistencia de los datos y evitar vulnerabilidades de seguridad.

Laravel hace que la validación de datos sea fácil e intuitiva. Sigue una arquitectura de controlador de vista de modelo (MVC) y solo requiere conocimientos generales de PHP y conceptos de programación orientada a objetos (OOP). Además, Laravel ofrece varios métodos para validar los datos entrantes.

Explore algunos de estos enfoques y cómo aplicar reglas de validación a su conjunto de datos.

Validación de datos simplificada en Laravel

Laravel proporciona varias reglas de validación listas para usar cuando los usuarios de su aplicación envían datos a través de formularios. Puede marcar los campos de entrada como obligatorios, establecer una longitud mínima o máxima y solicitar entradas únicas (no duplicadas) y direcciones de correo electrónico válidas. El validador de Laravel comprueba si la entrada cumple estas reglas o cualquier otra que especifiques.

Estas reglas de validación de Laravel incluyen:

  • required : los datos del campo no deben ser nulos ni estar vacíos.
  • array : los datos del campo deben ser una matriz de PHP.
  • bail : la regla de validación deja de ejecutarse después de encontrar su primer error de validación.
  • email : los datos del campo deben ser una dirección de correo electrónico válida.
  • unique : los datos del campo no deben tener duplicados en la tabla de la base de datos.

Todos los métodos de validación tienen ventajas y desventajas, pero su variedad le permite elegir el mejor enfoque para sus necesidades. Dependiendo del método elegido, la validación de Laravel puede ocurrir de varias maneras, con mensajes de error manuales o automáticos.

El método más común es código>validar, utilizado para solicitudes HTTP entrantes. Este método está encadenado a los datos de la solicitud, ejecutando las reglas de validación. Puede separar las reglas de cada campo con comas, como se ve en el siguiente ejemplo.

 use Illuminate\Http\Request; public function store (Request $request){ $validated = $request->validate([ 'email' => ['required, unique:users, email, bail'], 'name' => ['required'], ]); }

Aquí, email es una entrada obligatoria, lo que significa que no puede ser nulo. Además, debe ser único en la tabla de la base de datos users , lo que garantiza que la misma dirección de correo electrónico no se registre dos veces. La última regla dicta que la dirección de correo electrónico también debe ser válida. De lo contrario, el proceso de validación cesa. El campo de nombre es obligatorio pero no tiene otras reglas.

Si alguna regla de validación de Laravel falla, se genera una respuesta automáticamente.

¡No permita que un error de datos arruine todo su arduo trabajo! Valida tus datos y mantén tu proyecto sano y salvo ️ Haz clic para twittear

Conceptos básicos de validación

Para comprender mejor los métodos de validación, considere el siguiente ejemplo. Definirá una ruta para el punto final y creará un controlador para validar y procesar los datos de la solicitud.

Primero, cree un punto final simple que permita a los usuarios almacenar sus correos electrónicos y contraseñas.

Definir la ruta

Las rutas de Laravel se definen en el archivo route/web.php para una aplicación web o route/api.php para una API. Para este ejemplo, use api.php :

 use App\Http\Controllers\UserController; Route::post('/store', [UserController::class]);

Crear el controlador

Ejecute este comando Artisan para crear el controlador:

 php artisan make:controller UserController

Este comando crea un archivo UserController.php en el directorio app/Http/Controllers .

Ahora, defina un método store para validar los datos que ingresan al punto final de almacenamiento antes de almacenarlos.

Este ejemplo validará los siguientes campos usando estas reglas:

  • email : debe ser único, un correo electrónico válido y obligatorio
  • contraseña : debe tener una longitud mínima, confirmación de contraseña y debe ser requerida
  • edad — Debe ser un número y debe ser requerido
 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { /** * Store new user details. * */ public function store(Request $request){ $validated = $request->validate([ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]); // After user data is validated, logic to store the data } }

La regla confirmed le permite solicitar un campo en particular dos veces para verificar que los datos sean precisos, como que los usuarios vuelvan a ingresar sus contraseñas durante el registro. Esta regla requiere un campo llamado password_confirmation , cuyos datos deben coincidir con el campo de contraseña .

Mostrar mensajes de error

Si se cumplen los criterios de validación, su código continuará ejecutándose normalmente. Si la validación falla, se genera una excepción IlluminateValidationValidationException y se devuelve la respuesta de error adecuada.

El ejemplo se basa en una API, que devuelve una respuesta HTTP 422 Unprocessable Entity en formato JSON. Para las aplicaciones web, redirigiría a la URL anterior para mostrar el mensaje de error y los datos de la solicitud se mostrarían en la sesión.

Puede usar la variable $errors en sus vistas para mostrar los errores devueltos:

 @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif

También puede optar por ver solo el primer error o recorrerlo para verlos todos.

 // Fetch all errors $errors->all() // Fetch only the first error $errors->first()

Repoblar formularios

Rellenar formularios evita que los usuarios vuelvan a escribir la información para que puedan concentrarse en corregir el error. En el ejemplo de una dirección de correo electrónico que falla, puede volver a llenar el resto del formulario llamando al valor anterior para el campo name .

 $name = $request-> old('name') //Blade helper <input type="text" name="name" value="{{ old('name') }}">

Esta regla devolvería null si no hubiera una entrada anterior.

Validación Avanzada

Laravel proporciona otro método para escribir validaciones llamadas solicitudes de formulario. Una solicitud de formulario es una clase de solicitud personalizada que organiza validaciones y ordena su controlador.

Tienen su propia lógica de validación y autorización adecuada para grandes volúmenes de entrada y se pueden utilizar para definir reglas de validación y personalizar mensajes de error.

Para crear una solicitud de formulario, ejecute este comando de Artisan:

 php artisan make:request StoreUserRequest

Este comando crea un archivo StoreUserRequest.php en el directorio app/Http/Requests y contiene dos métodos predeterminados:

  • rules devuelve reglas de validación para los datos de la solicitud.
  • authorize devuelve un booleano para indicar si ese usuario tiene permiso para realizar la acción solicitada.

Convierta el ejemplo anterior para usar una solicitud de formulario.

 <?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StoreUserRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { // Add logic to check if the user is authorized to submit this data. return true; } /** * Get the validation rules that apply to the request. * * @return array<string, mixed> */ public function rules() { return [ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]; } }

Para personalizar los mensajes de error de estas reglas, puede anular el método de mensajes en la clase FormRequest .

 /** * Get the error messages for the defined validation rules. * * @return array */ public function messages() { return [ 'email.required' => 'An email address is required', 'email.email' => 'The email address must be valid', 'password.confirmed'=>'Re-type your password as password_confirmation, passwords does not match' ]; }

Nota: El nombre de los datos y la regla de validación están separados por un punto (.) antes de los datos del mensaje.

Validación personalizada

Para crear una validación personalizada, puede usar una fachada Validator en lugar de validate . La instancia del validador contiene dos argumentos: los datos que se validarán y una matriz de reglas de validación. Estos dos argumentos se pasan al método ::make en la fachada del validador, generando una nueva instancia del validador.

 use Illuminate\Http\Request; public function store (Request $request){ $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]); if ($validator->fails()) { // Return errors or redirect back with errors return $validator->errors(); } // Retrieve the validated input... $validated = $validator->validated(); // Continue logic to store the data }

Si desea agregar un directo automático, puede ejecutar el método validate en una instancia de validación preexistente. Si la validación falla, una solicitud XHR produce una respuesta JSON con 422 Unprocessable Entity como código de estado, o el usuario será redirigido inmediatamente.

 $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'password' => 'required|min:7|confirmed' ])->validate();

También puede personalizar sus mensajes de error pasando un tercer argumento llamado messages al Validate::make method :

 $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ], $messages = [ 'required' => 'The :attribute field is required.', ]);

Nota: El :attribute se reemplaza con el nombre del campo bajo validación.

Trabajar con grandes cantidades de datos podría salirse rápidamente de control. Proteja su proyecto (¡y su cordura!) con la validación de Laravel. Así es como Hacer clic para twittear

Resumen

Realizar la validación de datos es crucial para mantener su conjunto de datos limpio, correcto y completo. La validación de datos le permite eliminar errores en sus datos que podrían corromper o afectar su proyecto. La validación se vuelve cada vez más importante cuando se trabaja a escala y con grandes cantidades de datos.

Laravel permite numerosos enfoques flexibles para garantizar la integridad y precisión de los datos que pasan a través de su aplicación. Puede lograr una lógica de validación complicada con métodos predeterminados y personalizables, lo que hace que su base de código esté bien estructurada y sea más fácil de reutilizar.

Envíe sus aplicaciones Laravel más rápido con los servicios de alojamiento de aplicaciones de Kinsta.