提问者:小点点

cakephp变量在索引/视图中可用,但在控制器中不可用


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

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

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

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

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

因此,我可以在jobs index视图中使用以下内容:

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" } 

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

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

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

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

我不知道我做错了什么?变量在视图中工作,但在控制器逻辑中不工作。

我使用蛋糕2.3.4与mysql数据库


共2个答案

匿名用户

美元这个-

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获得当前用户-

无论哪种方式,它都将对您可用,这取决于您希望如何访问变量。无论如何,请记住,$this-

匿名用户

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

使用静态界面可以更容易地访问这些信息,并且使代码更干净,因为您不必设置“viewVars”来将这些信息传递给视图/元素,如果您需要在多个控制器的不同视图/操作中使用这些信息,这将减少代码重复。

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

echo AuthComponent::user('group_id');

如前所述,这可以在应用程序中的任何位置使用,因此,例如,也可以在助手中使用(甚至可以在模型中使用,但这可能不是正确的MVC)

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