如何从我的一些路由中删除过滤器Laravel 4.2

时间:2016-01-23 16:55:37

标签: php laravel laravel-4 laravel-5 laravel-routing

我有我的项目的路线,并且我使用Route::when('*', 'auth')来保护我的路线,在每条路线上按照auth filter实施,如下所示:

// All the following routes must be filtered by the 'auth' filter.
Route::when('*', 'auth');

Route::resource('route_1', 'Controller_1);
Route::controller('route_2', 'Controller_2');
Route::get('route_3', 'Controller_3@method_1');

很明显,用户无法以访客身份访问路线,换句话说无法登录。

现在我要使用几条无需登录即可访问的路由。我使用了以下代码,但它无效,并在auth filter上实施route_0

// Following two routes must not be filtered by the 'auth' filter.
Route::get('route_0', 'Controller_0@getMethod');
Route::post('route_0', 'Controller_0@postMethod');

// All the following routes must be filtered by the 'auth' filter.
Route::when('*', 'auth');

Route::resource('route_1', 'Controller_1);
Route::controller('route_2', 'Controller_2');
Route::get('route_3', 'Controller_3@method_1');

如何从auth filter删除route_0?我也不想在auth filterroute上单独使用controller。有什么解决方案吗?

3 个答案:

答案 0 :(得分:1)

您可以使用路线组,如下所示

Route::get('/',  array('as' => 'home','uses' => 'HomeController@index'));

Route::group(array('before' =>'auth'), function()
{
 Route::get('about',  array('as' => 'about','uses' => 'HomeController@about'));
}
);

将要过滤的路线放在群组和其他外部。您也可以使用多个组。

您可以在此处阅读https://laravel.com/docs/4.2/routing#route-filters

答案 1 :(得分:0)

您可以使用使用给定路由过滤器的路由组。

Route::group(['before' => ['auth']], function() {
    Route::resource('route_1', 'Controller_1');
    Route::controller('route_2', 'Controller_2');
    Route::get('route_3', 'Controller_3@method_1');
});
// Other non filtered routes.

文档:https://laravel.com/docs/4.2/routing#route-filters

注意:在Laravel 5. *中,我们不再使用过滤器,而是使用中间件:https://laravel.com/docs/master/middleware

答案 2 :(得分:0)

您可以使用whenRegex代替when,并在应用过滤器时排除匹配的路径路径:

Route::whenRegex('/^((?!route_0).)*$/', 'auth');