1

我有 2 个模型/视图/控制器 - 用户和作业

通过 Auth 方法,我在 AppController 中设置了以下内容:

$this->set('current_user', $this->Auth->user());

因此,一旦用户登录系统,我就可以使用用户数据。

我在用户表中有 id、姓名、电子邮件、用户名等,并且我有一个名为“group_id”的字段。我在作业表中还有一个“group_id”字段,我想做的只是显示记录/允许访问作业记录中的 group_id 与用户的 group_id 匹配的记录。

因此,我可以在作业索引视图中使用以下内容:

echo var_dump($current_user);

这将打印如下内容:

array(11) { ["id"]=> string(2) "13" ["firstname"]=> string(2) "My" ["surname"]=> string(4) "Name" ["email"]=> string(25) "myname@anemailaddress.com" ["username"]=> string(6) "myname" ["muso_email_notify"]=> string(1) "0" ["group_id"]=> string(1) "1" ["active"]=> string(1) "0" ["activationID"]=> string(0) "" ["memberaccesslevel"]=> string(1) "0" ["role"]=> string(7) "regular" } 

所以,现在当我在我的 JobsController 中选择所有工作时,我想使用这样的东西(它可能不太正确):

$this->set('jobs', $this->Job->find('all', array(
    'conditions' => array('Job.group_id' => $current_user['group_id']))));

但是,当我转到 Jobs 的索引视图时,我得到未定义变量错误:

注意(8):未定义变量:current_user [APP/Controller/JobsController.php,第 9 行]

我无法弄清楚我做错了什么?该变量在视图中有效,但在控制器逻辑中无效。

我正在使用 cake 2.3.4 和 mysql 数据库

4

2 回答 2

2

$this->set() 只是将变量设置为视图,因此在控制器上获取该错误是合乎逻辑的。在控制器中,您必须使用

public function someFunction() {
    $current_user = $this->Auth->user();
    echo $current_user['group_id'];
}

如果您想避免在每个函数上都这样做并且在任何地方都有一个当前用户变量,请在 AppController 中执行类似的操作

class AppController extends Controller {
    //create new variable
    public $_current_user = array();

    public function beforeFilter() {
         $this->_current_user = $this->Auth->user();
         $this->set('current_user', $this->_current_user);
    }
}

并且您将在控制器中使用当前用户,$this->_current_user并在视图中使用$current_user

无论哪种方式,它都将可供您使用,这仅取决于您要如何访问该变量。无论如何,请记住,这$this->set()只是为视图设置变量。

于 2013-05-23T17:49:30.697 回答
0

对于一般变量,Nunser 提供了一些有用的信息。但是,为了获取当前登录用户的信息,AuthComponent 也有一个“静态”接口,允许您在应用程序的任何位置访问用户的信息。

AuthComponent(静态)接口的优点

使用静态接口可以更轻松地访问该信息,并使您的代码更清晰,因为您不必设置“viewVars”来将该信息传递给您的视图/元素,这可以减少代码重复,如果您需要使用该信息在多个控制器的不同视图/操作中。

例如,要group_id在视图中获取当前用户的 ,只需执行以下操作:

echo AuthComponent::user('group_id');

如前所述,这适用于您的应用程序中的任何位置,因此,例如,也可以在 Helper 中使用(甚至在 Model 中,但这可能不是正确的 MVC)

有关更多信息,请阅读手册的这一部分:访问已登录的用户

于 2013-05-23T19:49:06.390 回答