Tu controlador está haciendo el trabajo equivocado
Abre tu controlador. Busca un método store.
¿Tiene 40 líneas de código? ¿Ves un bloque de validación gigante, varios if, lógica de negocio y luego una sentencia return?
Tu controlador está haciendo un trabajo que no le corresponde.
Un controlador tiene un solo trabajo. Recibe una solicitud, llama a un servicio para resolver el problema y devuelve una respuesta. Es el camarero, no el chef.
Cuando pones la validación y la autorización dentro de un controlador, se convierte en un caos. Terminas con 80 líneas de código que nadie quiere tocar.
Laravel tiene una solución integrada: Form Requests.
Un patrón incorrecto común se ve así:
- Validar los datos de entrada
- Comprobar los permisos del usuario
- Transformar datos
- Ejecutar lógica de negocio
Esto rompe el Principio de Responsabilidad Única (Single Responsibility Principle). Una clase debe tener una sola razón para cambiar. Un controlador cambia cuando cambia el flujo de la solicitud. No debería cambiar solo porque cambia una regla de validación.
Usa este comando para solucionarlo:
php artisan make:request StorePostRequest
Esto crea un archivo dedicado para la lógica de tu solicitud. Mueve estas tres cosas al Form Request:
- Autorización: Usa el método
authorize()para comprobar los permisos. - Validación: Usa el método
rules()para definir los requisitos de tus datos. - Preparación de datos: Usa
prepareForValidation()para limpiar o formatear los datos antes de la validación.
Ahora mira tu controlador de nuevo:
public function store(StorePostRequest $request)
{
$post = Post::create($request->validated());
return redirect()->route('posts.show', $post);
}
El controlador ahora tiene solo dos líneas. Vuelve a actuar como un camarero.
Laravel ejecuta la autorización y la validación automáticamente incluso antes de que el método del controlador comience. Si la validación falla, el usuario recibe un error inmediatamente.
Sigue estas pautas:
- Mantén la validación en línea si es corta y se usa en un solo lugar.
- Usa un Form Request si la validación crece, se repite o incluye autorización.
- No pongas lógica de negocio en un Form Request. Usa una capa de Servicio (Service layer) para eso.
Busca hoy mismo tu controlador más desordenado. Extrae la validación a un Form Request. Mira cómo se reduce.
¿Cuál es el método store más grande que has visto? Cuéntamelo en los comentarios.
Fuente: https://dev.to/denisgusto1/seu-controller-ta-fazendo-o-trabalho-do-form-request-e-ele-nao-devia-512o
