如何在Laravel 4路由组上应用多个过滤器?

时间:2014-04-22 15:41:27

标签: php laravel-4

是否可以在Laravel 4中的组路线上添加多个过滤器?

我有一个API中心应用程序的2种身份验证方法。 一个具有标准身份验证(网站过滤器“auth”),一个带有令牌(过滤器“auth.token”用于移动应用程序)。

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

理想情况下,我希望如果其中一个过滤器通过,则可以访问该组。

2 个答案:

答案 0 :(得分:19)

你可以:

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

但是如果你希望在过滤器的 过去时让它可以访问,你必须多写一点(在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');
});

在routes.php中

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

请记住,当过滤器通过时,您必须不返回任何内容。 我希望这可以帮助你!

答案 1 :(得分:2)

你可以用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
    });
});

查看documentation了解详情