无论如何都要将变量值从过滤器传递给Controller,
我尝试返回此值,但它会破坏控制器执行:
Route::filter('is_admin', function()
{
$data = DB::select(
'select level from users where user_id = ? limit 1',
array(Auth::user()->id)
);
if($data[0]->level > 5)
{
return 'not authorized';
}
//return level here
});
答案 0 :(得分:0)
无需将变量从过滤器传递到控制器。这也是个坏主意。 我看到你想从当前用户获得水平。应该在控制器中使用以下代码:
$level = Auth::user()->level;
此外,您可以使您的过滤器更简单:
Route::filter('is_admin', function()
{
$level = Auth::user()->level;
if($level > 5)
{
return 'not authorized';
}
});
答案 1 :(得分:0)
没有必要传递价值。我看到您正在使用Auth::user()
,因此您可能拥有与表User
相关联的users
模型。
你应该可以写:
Auth::user()->level
(在您的过滤器和控制器中)
答案 2 :(得分:0)
您应该将过滤器更改为:
Route::filter('admin', function()
{
if (Auth::guest() || Auth::user()->level > 5)
{
return 'not authorized';
}
});
并且在受此过滤器保护的所有路径中,您只需使用:
echo Auth::user()->name;
或
$user = Auth::user();
echo $user->name;
echo $user->level;
因此您无需将任何数据从过滤器传递到控制器或视图。您可以在控制器中使用它,您可以在其他模型中使用它,甚至可以在视图中使用它。