我有我的项目的路线,并且我使用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 filter
或route
上单独使用controller
。有什么解决方案吗?
答案 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'));
}
);
将要过滤的路线放在群组和其他外部。您也可以使用多个组。
答案 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');