I filtri

I filtri sono set di regole che si applicano alle rotte, generalmente prima che la risposta sia eseguita.

Come esempio supponiamo di voler caricare un template alternativo per l’home page tra mezzogiorno e l’una. Potremmo semplicemente inserire una condizione nella rotta prima di richiamare la vista.

Route::get('/', function()
{
	$ora = date( 'H' );
	if ( $ora == '12'  )
		return View::make( 'mezzogiorno' );

	return View::make( 'home' );
});

Per evitare di appesantire le rotte specialmente in caso ci siamo parecchie regole complesse Laravel ci dà la possibilità di tenere separati i filtri.

 

laravel-app-filters

Per creare un nuovo filtro utilizziamo il metodo Route::filter(), a cui passiamo un nome e un blocco di codice da eseguire all’interno di una funzione anonima.

// app/filter.php
Route::filter( 'mezzogiorno', function()
{
	if ( date( 'h' ) == '08' )
	{
		return View::make( 'mezzogiorno' );
	}
});

Per applicare il filtro prima che sia caricato il template di default

// app/routes.php
Route::get( '/', array(
	'before' => 'mezzogiorno',
	function()
	{
    	return View::make( 'hello' );

	}));

Filtri multipli

Per passare più filtri contemporaneamente si può utilizzare come separatore il simbolo ‘pipe’ |.

// app/routes.php
Route::get( '/', array(
	'before' => 'mezzogiorno|mezzanotte',
	function()
	{
    	return View::make( 'hello' );

	}));

Passare parametri ai filtri

Eventuali parametri opzionali sono elencati dopo il simbolo dei due punti e separati da una virgola.

// app/routes.php
Route::get( '/', array(
	'before' => 'test:uno,due,tre',
	function()
	{
    	return View::make( 'hello' );

	}));

Nel filtro i parametri aggiuntivi devo essere inseriti dal terzo parametro in poi. Il primo e il secondo rappresentano la rotta e la richiesta.

// app/filters.php
Route::filter( 'test', function( $route, $request, $par_uno, $par_due, $par_tre)
{
	return $par_uno . ' ' . $par_due . ' ' . $par_tre;
});

Nel caso di filtri da eseguire nella route dopo la logica della route, bisogna considerare il parametro $respose

// app/filters.php
Route::filter( 'test', function( $route, $request, $renspose ) )
{
//
});

I filtri globali

Se aprimo il file app/filters.php possiamo notare due filtri particolari

/*
|--------------------------------------------------------------------------
| Application & Route Filters
|--------------------------------------------------------------------------
|
| Below you will find the "before" and "after" events for the application
| which may be used to do any work before or after a request into your
| application. Here you may also register your custom route filters.
|
*/

App::before( function( $request )
{
	//
});

App::after( function( $request, $response )
{
	//
});

Questi filtri funzionano come tutti gli altri, l’unica differenza è che si applicano a tutte le rotte.

Filtri predefiniti

In app/filters.php troviamo anche

auth: verifica se l’user della sessione è autenticato.
auth.basic: integra una semplice autenticazione html.
guest: è l’opposto degli altri due inquanto verifica che l’utente non abbia effettuato il log in.
csrf: è l’acronimo di cross-site request forgery. Controlla che il token presente in una richiesta sia identico a quello memorizzato nella sessione. Evita richieste non autorizzate.

Applicare un filtro a pattern di URL

è possibile registrare un filtro a tutte le rotte che cominciano allo stesso modo. Nell’esempio il filtro auth è applicato a tutte le pagine che iniziano con utenti/. L’asterisco indica qualsiasi combinazione di caratteri.

// app/routes.php
Route::when('utenti/*', 'auth');

  inStileWeb.com
blog comments powered by Disqus