Laravel 4:将值从过滤器传递给控制器

时间:2014-10-29 12:21:29

标签: php laravel laravel-4

无论如何都要将变量值从过滤器传递给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 
});

3 个答案:

答案 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;

因此您无需将任何数据从过滤器传递到控制器或视图。您可以在控制器中使用它,您可以在其他模型中使用它,甚至可以在视图中使用它。

相关问题