La validazione dei dati è una parte essenziale per qualsiasi applicazione web. Se conosci le basi di laravel, saprai che esiste un sistema molto semplice di validazione che utilizza la classe Validator.
Il package “laracasts/validation” ti offre un modo alternativo, e ben strutturato per il controllo dell’input.
Scopriamolo insieme, in questo articolo.
Installazione del Package
Installiamo il package tramite composer, aggiungendo questa stringa nel campo require:
“require”: {
“laracasts/validation”: “~1.0”
}
Successivamente, dopo aver eseguito da terminale il comando composer update, aggiungiamo il service provider all’interno dell’array providers del file app.php.
‘LaracastsValidationValidationServiceProvider’
Utilizzo
Immagina di dover validare i dati degli utenti che effettuano un login. Per prima cosa, crea una classe LoginForm, in cui andrai ad inserire le tue regole di validazione, in questo modo:
use LaracastsValidationFormValidator
class LoginForm extends FormValidator {
/**
* Validation rules for logging in
*
* @var array
*/
protected $rules = [
‘username’ => ‘required’,
‘password’ => ‘required’
];
}
Il passo successivo è di includere questa nuova classe all’interno del nostro controller, o comunque dove tu abbia bisogno di eseguire la validazione.
use MyAppFormsLogin as LoginForm;
use LaracastsValidationFormValidationException;
protected $loginForm;
public function __construct(LoginForm $loginForm)
{
$this->loginForm = $loginForm;
}
public function store()
{
$input = Input::all();
try
{
$this->loginForm->validate($input);
// login user, do whatever, redirect
}
catch (FormValidationException $e)
{
return Redirect::back()->withInput()->withErrors($e->getErrors());
}
}
Se la validazione va a buon fine, verrà ritornato true. Altrimenti verrà lanciata un’eccezione FormValidationException.
A questo punto hai due scelte: la prima è quella di intercettare l’eccezione all’interno del tuo controller come nell’esempio, con il blocco try catch.
La seconda è di usare un intercettazione globale, inserendo questo semplice codice nel file global.php:
App::error(function(LaracastsValidationFormValidationException $exception, $code)
{
return Redirect::back()->withInput()->withErrors($exception->getErrors());
});
Come ben saprai… (perché lo sai, vero?) global.php contiene degli handlers globali per intercettare gli errori. Quindi se la validazione fallisce, l’utente verrà reindirizzato nella pagina del form.
Ora non rimane che validare i dati, usando il metodo validate:
$this->registrationForm->validate(Input::all());
Ed voilà, il gioco è fatto.
Spero che questo package possa esserti utile: se hai qualche osservazione, feedback o semplice parere commenta qui sotto!
Note Conclusive
Questo package non sarà necessario in Laravel 5.0.