Laravel ofrece una potente herramienta para validar formularios, tanto en el servidor como en el cliente. Este tutorial te enseñará cómo utilizar las características de validación de Laravel paso a paso, cubriendo desde reglas básicas hasta validación avanzada.
Antes de comenzar con la validación, asegúrate de tener una instalación de Laravel funcionando. Si no tienes Laravel instalado, puedes hacerlo ejecutando el siguiente comando:
composer create-project --prefer-dist laravel/laravel validacion-laravel
Laravel proporciona un método validate que puedes usar en tu controlador para validar los datos de un formulario. Vamos a crear un formulario básico para este ejemplo.
Primero, creamos un formulario simple para un usuario con name, email y password.
<form method="POST" action="/store-user">
@csrf
<label for="name">Nombre:</label>
<input type="text" name="name" id="name">
<br>
<label for="email">Correo Electrónico:</label>
<input type="email" name="email" id="email">
<br>
<label for="password">Contraseña:</label>
<input type="password" name="password" id="password">
<br>
<button type="submit">Registrar</button>
</form>
En el controlador, puedes usar el método validate para aplicar reglas de validación. Vamos a crear un controlador para manejar este formulario:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function store(Request $request)
{
$request->validate([
'name' => 'required|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|confirmed|min:8',
]);
// Si pasa la validación, los datos se guardan
// Aquí va la lógica para guardar los datos del usuario
return redirect()->back()->with('success', 'Usuario registrado correctamente');
}
}
required: El campo es obligatorio.max:255: El campo no debe superar los 255 caracteres.email: El campo debe tener un formato válido de correo electrónico.unique:users,email: El correo electrónico debe ser único en la tabla users.confirmed: Verifica que haya un campo de confirmación del campo password (debe ser un campo con el mismo nombre, pero con el sufijo _confirmation).min:8: El campo debe tener un mínimo de 8 caracteres.En lugar de definir las reglas de validación directamente en el controlador, puedes crear una clase FormRequest para centralizar la lógica de validación.
FormRequestEjecuta el siguiente comando para generar una clase de validación personalizada:
php artisan make:request StoreUserRequest
Laravel generará una nueva clase en app/Http/Requests/StoreUserRequest.php. Dentro de esta clase, puedes definir las reglas de validación.
StoreUserRequestAbre StoreUserRequest.php y define las reglas de validación en el método rules():
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreUserRequest extends FormRequest
{
public function rules()
{
return [
'name' => 'required|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|confirmed|min:8',
];
}
public function messages()
{
return [
'name.required' => 'El nombre es obligatorio.',
'email.required' => 'El correo electrónico es obligatorio.',
'password.min' => 'La contraseña debe tener al menos 8 caracteres.',
];
}
}
Ahora, en tu controlador, puedes usar este FormRequest para manejar la validación:
namespace App\Http\Controllers;
use App\Http\Requests\StoreUserRequest;
class UserController extends Controller
{
public function store(StoreUserRequest $request)
{
// Los datos ya han sido validados
$validatedData = $request->validated();
// Lógica para guardar el usuario
return redirect()->back()->with('success', 'Usuario registrado correctamente');
}
}
Puedes personalizar los mensajes de error de validación, como se muestra en el método messages() de la clase StoreUserRequest en el ejemplo anterior.
Si no usas un FormRequest, también puedes pasar los mensajes personalizados directamente al método validate del controlador:
$request->validate([
'name' => 'required|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|confirmed|min:8',
], [
'name.required' => 'El nombre es obligatorio.',
'email.email' => 'Por favor, ingrese un correo electrónico válido.',
]);
Laravel también permite validar archivos (por ejemplo, imágenes o documentos PDF). Aquí te mostramos cómo hacerlo.
$request->validate([
'avatar' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048',
]);
image: Asegura que el archivo sea una imagen.mimes: Define los tipos de archivo permitidos.max: Define el tamaño máximo del archivo en kilobytes.Una vez que el archivo sea validado, puedes almacenarlo con el método store:
$path = $request->file('avatar')->store('avatars');
En algunas ocasiones, quieres aplicar reglas de validación solo si se cumple cierta condición. Por ejemplo, validar el número de teléfono solo si se proporciona:
$request->validate([
'phone' => 'nullable|regex:/^\+?[1-9]\d{1,14}$/',
]);
sometimesSi necesitas aplicar reglas de validación solo cuando se cumpla una condición específica, puedes usar el método sometimes:
$request->validate([
'phone' => 'nullable',
'address' => 'sometimes|required|max:255',
]);
A veces, quieres validar el formulario sin recargar la página. Esto se puede hacer fácilmente con una llamada AJAX.
javascriptCopiar$('#myForm').submit(function(e) {
e.preventDefault();
$.ajax({
url: '/store-user',
method: 'POST',
data: $('#myForm').serialize(),
success: function(response) {
alert('Formulario enviado con éxito');
},
error: function(response) {
var errors = response.responseJSON.errors;
// Muestra los errores en el formulario
}
});
});
Si usas Vue.js para tu frontend, puedes integrar la validación de formularios en el lado del cliente con bibliotecas como VeeValidate o Vuelidate. Sin embargo, es importante no depender únicamente de la validación del lado del cliente, ya que siempre debes validar también del lado del servidor.
© Copyright 2016 nicdark.com - Design School Theme
Wonderful NicDark WP Theme
Deja una respuesta