2014-04-22 13 views
8

È possibile aggiungere più filtri su una rotta di gruppo in Laravel 4?Come applicare più filtri sul gruppo di rotte di Laravel 4?

Ho 2 metodi di autenticazione per un'applicazione API centric. Uno con autenticazione standard (filtro "auth" per sito Web), uno con token (filtro "auth.token" per app mobile).

<?php 
    Route::group(array('prefix' => 'api/'), function() { 
     #Custom routes here 
    }); 
?> 

Idealmente mi piacerebbe che se uno dei due filtri passa, gruppo è accessibile.

risposta

19

È possibile:

Route::group(['before' => 'auth|csrf'], function() 
{ 
    // 
}); 

Tuttavia, se si vuole rendere accessibile se uno di i filtri passano, dovresti scrivere un po 'di più (in filters.php):

function csrfFilter() 
{ 
    if (Session::token() != Input::get('_token')) 
    { 
     throw new Illuminate\Session\TokenMismatchException; 
    } 
} 
function authFilter() 
{ 
    if (Auth::guest()) return Redirect::guest('login'); 
} 

Route::filter('csrf-or-auth', function() 
{ 
    $value = call_user_func('csrfFilter'); 
    if ($value) return $value; 
    else return call_user_func('authFilter'); 
}); 

In routes.php

Route::group(['before' => 'csrf-or-auth'], function() 
{ 
    // 
}); 

Ricordati di tornare nulla quando il filtro passa. Spero che questo ti aiuti!

+1

C'è un errore di sintassi. Il codice che deve essere inserito nel file 'routes.php' deve essere' Route :: group (array ('before' => 'csrf-or-auth'), function() { }) ' – Amr

+0

Grazie @Amr. È stato risolto ora – edpaez

+0

Hai ancora bisogno di rimuovere una delle ultime 2 parentesi (quelle esistenti prima del punto e virgola). E applica anche le stesse modifiche al primo snippet di codice. – Amr

2

È possibile farlo con laravel

Route::group(array('prefix' => 'api/', 'before' => 'filter1|filter2'), function() 
{ 
    Route::get('api1', function() 
    { 
     // Has Filter1 and filter2 
    }); 

    Route::get('api2', function() 
    { 
     // Has filter1 and filter2 
    }); 
}); 

controllo del documentation per maggiori dettagli

+2

L'op ha chiesto O hai spiegato come fare AND. Il | nella prima proprietà significa AND, in realtà è solo un separatore di array. – malhal

Problemi correlati