Il tuo Controller sta facendo troppo lavoro

Apri il tuo controller. Guarda il tuo metodo store.

Ha 40 righe di codice? Inizia con un enorme blocco di validazione, seguito da diversi statement if, poi la logica di business e infine un return?

Il tuo controller sta facendo un lavoro che non gli compete.

Un controller ha un unico, semplice ruolo. Riceve una richiesta, chiama un servizio per risolvere il problema e restituisce una risposta. Pensalo come un cameriere. Un cameriere porta il cibo. Non lo cucina.

Quando inserisci validazione, autorizzazione ed elaborazione dei dati all'interno di un controller, si crea un caos. Ti ritroverai con un mostro di 80 righe che nessuno vuole toccare.

Laravel ha una soluzione integrata: i Form Request.

Smetti di ripetere la logica di validazione e autorizzazione in ogni metodo. Usa il Single Responsibility Principle. Una classe dovrebbe avere un solo motivo per cambiare. Un controller cambia quando cambia il flusso della richiesta. Non dovrebbe cambiare solo perché cambia una regola di validazione.

Esegui questo comando per creare una classe request dedicata: php artisan make:request StorePostRequest

Sposta la tua logica in questa nuova classe. Un Form Request gestisce tre cose principali:

• Autorizzazione: Usa il metodo authorize per decidere se un utente può eseguire un'azione. Se restituisce false, Laravel invia automaticamente un errore 403.

• Validazione: Usa il metodo rules per definire i requisiti dei tuoi dati.

• Preparazione dei dati: Usa prepareForValidation per pulire o trasformare i dati prima che la validazione venga eseguita. È perfetto per generare slug o normalizzare i numeri di telefono.

Una volta spostata questa logica, il tuo controller si restringe. Potrebbe apparire così:

public function store(StorePostRequest $request)
{
    $post = Post::create($request->validated());
    return redirect()->route('posts.show', $post);
}

Tutto qui. Due righe.

Il controller rimane snello perché Laravel esegue la validazione e l'autorizzazione prima ancora che il metodo inizi. Se i dati sono errati, l'utente riceve immediatamente un errore.

Una parola di avvertimento. Non usare i Form Request per tutto. Se hai una rotta minuscola con un solo campo semplice, mantieni la validazione inline. Usa i Form Request quando la logica cresce, si ripete o coinvolge permessi.

Inoltre, non inserire la logica di business in un Form Request. I calcoli e gli aggiornamenti del database appartengono a un Service layer.

Trova oggi il tuo controller più disordinato. Estrai la validazione in un Form Request. Guarda come si restringe.

Qual è il metodo store più grande che tu abbia mai visto? Dimmi tutto nei commenti.

Fonte: https://dev.to/denisgusto1/seu-controller-ta-fazendo-o-trabalho-do-form-request-e-ele-nao-devia-512o