所以我必须有一个登录表面,登录后我必须决定哪个管理表面可供用户使用。
所以我为此设置了路由,在访问管理页面之前,他们需要登录,登录后会重定向到相应的管理页面:
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;
上得到了一个非对象错误的Trying-to-get属性,而在firefox中只有一个int(1)响应,没有错误。你能帮我解决这个问题吗?我在哪里犯错误?这前后逻辑正确吗?或者我应该在其他地方添加后过滤器吗?
我想我也在使用Laravel3。我刚得到这个项目,我必须继续。
所以我有一个解决方案:
如果Auth::guest()
为true,auth
过滤器会将您重定向到login
表面,因此它可以通过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
过滤器?
您应该使用Laravel中间件
这就是如何在您的路线
switch() {case:}