所以我必须有一个登录界面,登录后我必须决定哪个管理界面可供用户使用。
所以我为此设置路由,在可以访问管理页面之前,他们需要登录,在他们登录后,他们被重定向到相应的管理页面:
Route::get('admin', array('before' => 'auth', 'after' => 'access_lvl'));
Route::get('admin1', array('before' => 'auth', 'as'=>"admin1", 'uses' => 'admin1@index'));
Route::get('admin2', array('before' => 'auth', 'as'=>"admin2", 'uses' => 'admin2@index'));
Route::get('admin3', array('before' => 'auth', 'as'=>"admin3", 'uses' => 'admin3@index'));
这是access_lvl
过滤器:
Route::filter('access_lvl',function(){
$access_lvl=Auth::user()->access_lvl;
var_dump($access_lvl);
switch($access_lvl){
case 1: return Redirect::to('admin1/'); break;
case 2: return Redirect::to('admin2/'); break;
case 3: return Redirect::to('admin3/'); break;
default: return Redirect::to('admin3/'); break;
};
});
不幸的是,我试图在chrome中Auth::user()->access_lvl;
获取非对象错误的属性,并且在firefox中只有int(1)响应没有错误。你能帮我解决这个问题吗?我哪里弄错了?这是在逻辑正确之后吗?或者我应该在其他地方添加后过滤器吗?
我认为我也在使用Laravel3。我刚刚完成了这个项目,我必须继续这样做。
答案 0 :(得分:0)
所以我有一个解决方案:
如果auth
为真,login
过滤器会将您重定向到Auth::guest()
表面,因此它可以通过switch
语句将您重定向到相应的管理页面,如下所示:
Route::filter('auth', function()
{
if (Auth::guest()) return Redirect::to('admin/login');
$access_lvl=Auth::user()->access_lvl;
switch($access_lvl){
case 1: return Redirect::to('admin1/'); break;
case 2: return Redirect::to('admin2/'); break;
case 3: return Redirect::to('admin3/'); break;
default: return Redirect::to('admin3/'); break;
};
});
这意味着您不必拥有单独的access_lvl
过滤器
虽然这是一个解决方案,但我仍然有疑问:
原始案例中使用after
过滤器的探测是什么?
我什么时候应该使用after
过滤器?
答案 1 :(得分:-1)
您应该使用Laravel Middleware
这是如何避免路线中的switch() {case:}