Cos’è la validazione
La validazione consiste nel verificare che i dati inviati dall’utente soddisfino il formato e le condizioni attese. Laravel offre una funzionalità di validazione semplice e potente tramite il metodovalidate dell’oggetto request o tramite classi form request dedicate.
Validazione nel controller
Uso di $request->validate()
Chiamare $request->validate() all’interno del metodo del controller è il modo più semplice di validare.
Se la validazione fallisce, Laravel reindirizza automaticamente l’utente alla schermata precedente e salva gli errori in sessione.
Definisci le route.
validate passi un array con nome del campo come chiave e regole come valore.
Puoi separare le regole con il pipe | o indicarle come array.
Regole di validazione principali
Puoi consultare tutte le regole disponibili nella documentazione ufficiale.
Validare le chiavi di un array
La regolaarray_keys verifica che il valore in oggetto sia un array PHP e che tutte le chiavi siano contenute nell’elenco fornito. Deve essere specificata almeno una chiave.
Rule::arrayKeys.
Uso dei dati validati
Il valore restituito davalidate è un array che contiene solo i dati che hanno superato la validazione.
Puoi usarli in modo sicuro come dati affidabili.
Visualizzazione degli errori in Blade
Se la validazione fallisce, Laravel rende automaticamente disponibile in tutte le viste la variabile$errors.
Se ne occupa il middleware ShareErrorsFromSession incluso nel gruppo web.
Mostrare tutti gli errori in un elenco
Mostrare gli errori per singolo campo
Con la direttiva@error puoi mostrare inline l’errore di un campo specifico.
Form request
Cosa sono le form request
Quando la logica di validazione diventa complessa, è utile estrarla in classi “form request”. Una form request è una classe request personalizzata che raccoglie in un’unica classe la logica di validazione e di autorizzazione.Creazione di una form request
Genera una classe form request con il comando Artisanmake:request.
app/Http/Requests/StorePostRequest.php.
Metodo rules()
Restituisce le regole di validazione come array. Stesso formato dell’array passato a validate del controller.
Metodo authorize()
Determina se l’utente è autorizzato a eseguire la richiesta.
Restituendo true l’autorizzazione è concessa; restituendo false viene restituita automaticamente una response 403.
Se vuoi consentire solo agli utenti autenticati puoi verificare con auth()->check().
Nel tutorial è sufficiente restituire true.
Iniezione nel controller
Basta indicare la form request come type hint del metodo del controller. La validazione viene eseguita prima che il controller venga chiamato, quindi non serve scriverla nel metodo.$request->validated() ottieni solo i dati validati.
Specificare complessità e lunghezza della password
L’oggetto RulePassword permette di specificare insieme la complessità della password e il numero minimo/massimo di caratteri.
min() specifica il numero minimo di caratteri e max() il numero massimo. Impostare max() permette di consentire password complesse dichiarando al contempo un limite superiore assunto dallo storage e dalle integrazioni con servizi di terze parti.
Esempio pratico: creazione e salvataggio di un form di post
Il flusso completo dalla visualizzazione del form all’invio, validazione e salvataggio.1
Definizione delle route
2
Creazione della form request
3
Implementazione del controller
4
Creazione del template Blade
Nei form Blade includi sempre la direttiva
@csrf. Senza il token CSRF Laravel restituisce l’errore 419.Prossimi passi
Richieste HTTP
Rivedi come ottenere i dati usando l’oggetto request.