Form Requests: validación estructurada en APIs

Básico
Laravel
Laravel
Actualizado: 01/04/2026

Por qué Form Requests

En APIs REST, los datos de entrada (JSON, formularios) deben validarse antes de usarlos. Hacerlo directamente en el controlador lleva a métodos largos y reglas repetidas. Los Form Requests permiten extraer la validación a clases dedicadas, reutilizables y fáciles de testear.

flowchart TD
  P[Petición HTTP]
  FR[Form Request reglas authorize mensajes]
  C[Método del controlador]
  E[Respuesta 422 con errores de validación]
  P --> FR
  FR -->|pasa las reglas| C
  FR -->|no pasa las reglas| E
php artisan make:request StorePostRequest
php artisan make:request UpdatePostRequest

Estructura básica

Un Form Request típico incluye rules() y opcionalmente authorize() y messages():

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StorePostRequest extends FormRequest
{
    public function authorize(): bool
    {
        return true; // o lógica de autorización
    }

    public function rules(): array
    {
        return [
            'title' => 'required|string|max:255|unique:posts,title',
            'body' => 'required|string',
            'published_at' => 'nullable|date',
        ];
    }

    public function messages(): array
    {
        return [
            'title.required' => 'El título es obligatorio.',
            'title.unique' => 'Ya existe un post con ese título.',
        ];
    }
}

Uso en el controlador

Inyecta el Form Request en el método del controlador. Laravel ejecuta la validación automáticamente antes de invocar el método; si falla, devuelve errores (por defecto en JSON para peticiones API):

public function store(StorePostRequest $request): JsonResponse
{
    $validated = $request->validated();
    $post = Post::create($validated);
    return response()->json(new PostResource($post), 201);
}

$request->validated() devuelve solo los campos que pasaron las reglas. Los errores de validación se envían con código 422 Unprocessable Entity y estructura estándar de Laravel.

En una petición API, el cuerpo de respuesta incluye el objeto errors con los mensajes por campo, por ejemplo:

Respuesta JSON 422 con errores de validación devueltos por un Form Request

Reglas útiles para APIs

Algunas reglas frecuentes en APIs:

| Regla | Uso | |-------|-----| | required | Campo obligatorio | | string, integer, boolean | Tipo de dato | | email | Formato de correo | | unique:table,column | Valor único en tabla | | exists:table,column | Referencia a registro existente | | array | Espera un array | | array:* | Reglas para elementos del array |

Ejemplo con relación:

'title' => 'required|string|max:255',
'category_id' => 'required|exists:categories,id',
'tags' => 'array',
'tags.*' => 'exists:tags,id',
Alan Sastre - Autor del tutorial

Alan Sastre

Ingeniero de Software y formador, CEO en CertiDevs

Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, Laravel es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.

Más tutoriales de Laravel

Explora más contenido relacionado con Laravel y continúa aprendiendo con nuestros tutoriales gratuitos.

Aprendizajes de esta lección

Crear Form Requests para centralizar la validación de entradas en controladores

Cursos que incluyen esta lección

Esta lección forma parte de los siguientes cursos estructurados con rutas de aprendizaje