Model' s函数返回Undefined变量:role

时间:2014-05-12 05:39:17

标签: php laravel laravel-4

我有这个表结构

用户

  • ID
  • 电子邮件
  • 角色

作用

  • ID
  • 作用

ROLE_USER

  • ID
  • ROLE_ID
  • USER_ID

我在User模型中添加了一个函数,用于检查Authenticated用户的角色。但我得到它会返回此错误:

  

未定义变量:角色

//User.php
public function hasRole($role = null)
{
    $hasRole = false;
    $hasRole = !$this->roles->filter(function($item) {
        return $item->role == $role;
    })->isEmpty();
    return $hasRole;
}

所以我可以使用这样的东西 - 也许在过滤器里面

if(Auth::user()->hasRole('encoder')) {
    //...
}

1 个答案:

答案 0 :(得分:1)

在PHP中,默认情况下,函数无权访问函数外部声明的变量。

无法从该闭包中访问此变量

public function hasRole($role = null)
{
    $hasRole = false;
    $hasRole = !$this->roles->filter(function($item) {
        return $item->role == $role;
    })->isEmpty();            ^^^^^
    return $hasRole;
}

您可以使用use关键字,它将一个变量传递给函数:

public function hasRole($role = null)
{
    $hasRole = false;
    $hasRole = !$this->roles->filter(function($item) use($role) {
        return $item->role == $role;
    })->isEmpty();
    return $hasRole;
}

他们在this blog post

上提供了有关此特定问题的更多信息