在Cakephp中使用$ this-> Auth获取相关模型

时间:2012-03-20 11:05:49

标签: cakephp cakephp-2.0

我正在使用CakePHP 2.0的集成Auth组件。 我有以下表格:

  
      
  • 用户
  •   
  •   
  • 配置文件
  •   

我的模型关系如下:

User belongsTo Group
User hasMany Profiles

登录到站点后,我注意到Auth会话仅包含用户表信息,但我也需要登录用户的组和配置文件表的信息。

有没有办法用Auth组件做到这一点?

3 个答案:

答案 0 :(得分:6)

由于处理会话密钥的方式,AuthComponent无法执行此操作。但是,您可以自己将其保存到会话中。

执行此操作的唯一方法是在用户登录时添加到会话中:

function login() {
    if ($this->Auth->login($this->data)) {
        $this->User->id = $this->Auth->user('id');
        $this->User->contain(array('Profile', 'Group'));
        $this->Session->write('User', $this->User->read());
    }
}

然后在您beforeFilter()的{​​{1}}中,为控制器保存一个var以进入:

AppController

更新:从CakePHP 2.2(announced here)开始,AuthComponent现在接受“包含”键,用于在会话中存储额外信息。

答案 1 :(得分:1)

据我所知,Auth组件只缓存来自Users模型的数据。您可以使用该信息从其他模型中检索所需数据,例如在控制器中使用它:

$group_data = $this->Group->findById($this->Auth->user('group_id'));

或者

$profile_data = $this->Profile->findByUserId($this->Auth->user('id'));

但我认为你不能直接从Auth组件中获取它,因为它不会立即缓存相关的模型数据。

答案 2 :(得分:1)

两种方式:

1)扩展FormAuthenticate类(请参阅/ Controller / Component / Auth)或您用于登录的任何内容并覆盖_findUser()方法并告诉Auth组件使用此authorize类。请参阅此页面如何完成所有http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html

2)只需在模型中实现一个方法,该方法将获取您想要的所有数据,并在控制器的登录方法中调用它并将数据写入会话。 IMO使用这种方法很方便,因为有时你需要刷新会话数据。

由于您对其他答案的评论:

您必须在模型中编写一个方法和一些代码来返回数据。 CakePHP无法读取您的想法和没有代码的数据库。无论你打算使用哪种方法,你都必须编写代码。