2014-04-22 7 views
8

Ist es möglich, mehrere Filter auf einer Gruppenroute in Laravel 4 hinzuzufügen?Wie wendet man mehrere Filter auf die Laravel 4-Routengruppe an?

Ich habe 2 Authentifizierungsmethoden für eine API-zentrische Anwendung. Eines mit Standardauthentifizierung (Filter "auth" für Website), eines mit Token (Filter "auth.token" für mobile App).

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

Im Idealfall würde Ich mag, dass , wenn einer der beiden Filter passieren, Gruppe zugänglich ist.

Antwort

19

Sie können:

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

Allerdings, wenn Sie es accesible wenn entweder machen wollen von Die Filter passieren, Sie müssten ein bisschen mehr schreiben (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() 
{ 
    // 
}); 

Denken Sie daran, Sie haben nichts zurück, wenn die Filter passieren. Ich hoffe das hilft dir!

+1

Es liegt ein Syntaxfehler vor. Der Code, der in der 'routes.php' Datei gespeichert werden soll, muss' Route :: group (array ('before' => 'csrf-or-auth'), Funktion() { }) sein; ' – Amr

+0

Danke @ Amr. Es ist nun behoben – edpaez

+0

Sie müssen immer noch eine der letzten 2 Klammern (die vor dem Semikolon existieren) entfernen. Und wenden Sie die gleichen Änderungen auch auf das erste Code-Snippet an. – Amr

2

können Sie tun das mit 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 
    }); 
}); 

Überprüfung der documentation für mehr Details

+2

Die OP gefragt für ODER haben Sie erklärt, wie man UND tun. Das | in der Vorher-Eigenschaft bedeutet UND, es ist eigentlich nur ein Array-Separator. – malhal

Verwandte Themen