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

How to Remove Filter from Some of My Routes Laravel 4.2

我有我的项目的路线,我正在使用 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');

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

现在我要使用几个无需登录即可访问的路由。我正在使用以下代码,但它不起作用并且还在 route_0:

上实现了 auth filter
// 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');

如何从 route_0 中删除 auth filter?我也不想在每个 routecontroller 上单独使用 auth filter。请问有什么解决办法吗?

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

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.

您可以像下面这样使用路由组

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

您可以使用 whenRegex 而不是 when 并在应用过滤器时从匹配中排除路由路径:

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