Il tuo Controller sta facendo il lavoro sbagliato
Apri il tuo controller. Cerca un metodo store.
Ha 40 righe di codice? Vedi un enorme blocco di validazione, diversi statement if, la logica di business e poi un'istruzione di ritorno?
Il tuo controller sta facendo un lavoro che non dovrebbe fare.
Un controller ha un solo compito. Riceve una richiesta, chiama un servizio per risolvere il problema e restituisce una risposta. È il cameriere, non lo chef.
Quando inserisci validazione e autorizzazione all'interno di un controller, diventa un caos. Ti ritroverai con 80 righe di codice che nessuno vuole toccare.
Laravel ha una soluzione integrata: i Form Request.
Un comune pattern errato è questo:
- Validazione dei dati in input
- Controllo dei permessi dell'utente
- Trasformazione dei dati
- Esecuzione della logica di business
Questo viola 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.
Usa questo comando per risolvere:
php artisan make:request StorePostRequest
Questo crea un file dedicato per la logica della tua richiesta. Sposta queste tre cose nel Form Request:
- Autorizzazione: Usa il metodo
authorize()per controllare i permessi. - Validazione: Usa il metodo
rules()per definire i requisiti dei dati. - Preparazione dei dati: Usa
prepareForValidation()per pulire o formattare i dati prima della validazione.
Ora guarda di nuovo il tuo controller:
public function store(StorePostRequest $request)
{
$post = Post::create($request->validated());
return redirect()->route('posts.show', $post);
}
Il controller è ora lungo due righe. Agisce di nuovo come un cameriere.
Laravel esegue l'autorizzazione e la validazione automaticamente prima ancora che il metodo del controller inizi. Se la validazione fallisce, l'utente riceve immediatamente un errore.
Segui queste linee guida:
- Mantieni la validazione inline se è breve e utilizzata in un solo punto.
- Usa un Form Request se la validazione cresce, si ripete o include l'autorizzazione.
- Non inserire la logica di business in un Form Request. Usa un Service layer per quello.
Trova oggi il tuo controller più disordinato. Estrai la validazione in un Form Request. Guarda come si rimpicciolisce.
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
