Tu controlador está haciendo demasiado trabajo
Abre tu controlador. Mira tu método store.
¿Tiene 40 líneas de código? ¿Comienza con un bloque de validación masivo, seguido de varios if, luego lógica de negocio y finalmente un return?
Tu controlador está haciendo un trabajo que no le corresponde.
Un controlador tiene un rol sencillo. Recibe una solicitud, llama a un servicio para resolver el problema y devuelve una respuesta. Piénsalo como un camarero. Un camarero te trae la comida; no la cocina.
Cuando pones la validación, la autorización y el procesamiento de datos dentro de un controlador, se convierte en un caos. Terminas con un monstruo de 80 líneas que nadie quiere tocar.
Laravel tiene una solución integrada: Form Requests.
Deja de repetir la lógica de validación y autorización en cada método. Utiliza 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.
Ejecuta este comando para crear una clase de solicitud dedicada:
php artisan make:request StorePostRequest
Mueve tu lógica a esta nueva clase. Un Form Request se encarga de tres cosas principales:
• Autorización: Usa el método authorize para decidir si un usuario puede realizar una acción. Si devuelve false, Laravel envía automáticamente un error 403.
• Validación: Usa el método rules para definir tus requisitos de datos.
• Preparación de datos: Usa prepareForValidation para limpiar o transformar los datos antes de que se ejecute la validación. Esto es perfecto para generar slugs o normalizar números de teléfono.
Una vez que muevas esta lógica, tu controlador se reducirá. Podría verse así:
public function store(StorePostRequest $request)
{
$post = Post::create($request->validated());
return redirect()->route('posts.show', $post);
}
Eso es todo. Dos líneas.
El controlador se mantiene ligero porque Laravel ejecuta la validación y la autorización incluso antes de que el método comience. Si los datos son incorrectos, el usuario recibe un error inmediatamente.
Una palabra de advertencia. No uses Form Requests para todo. Si tienes una ruta diminuta con un solo campo simple, mantén la validación en línea. Usa Form Requests cuando la lógica crezca, se repita o involucre permisos.
Además, no pongas lógica de negocio en un Form Request. Los cálculos y las actualizaciones de la base de datos pertenecen a una capa de Servicio (Service layer).
Busca tu controlador más desordenado hoy mismo. 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.
Source: https://dev.to/denisgusto1/seu-controller-ta-fazendo-o-trabalho-do-form-request-e-ele-nao-devia-512o
