是否可以在Laravel 4中的组路线上添加多个过滤器?
我有一个API中心应用程序的2种身份验证方法。 一个具有标准身份验证(网站过滤器“auth”),一个带有令牌(过滤器“auth.token”用于移动应用程序)。
<?php
Route::group(array('prefix' => 'api/'), function() {
#Custom routes here
});
?>
理想情况下,我希望如果其中一个过滤器通过,则可以访问该组。
答案 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了解详情