如何从我的一些路线中删除过滤器 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
?我也不想在每个 route
或 controller
上单独使用 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'));
}
);
将需要过滤的路由放在组内,其他放在组外。您也可以使用多个组。
您可以使用 whenRegex
而不是 when
并在应用过滤器时从匹配中排除路由路径:
Route::whenRegex('/^((?!route_0).)*$/', 'auth');
我有我的项目的路线,我正在使用 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
?我也不想在每个 route
或 controller
上单独使用 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'));
}
);
将需要过滤的路由放在组内,其他放在组外。您也可以使用多个组。
您可以使用 whenRegex
而不是 when
并在应用过滤器时从匹配中排除路由路径:
Route::whenRegex('/^((?!route_0).)*$/', 'auth');