【问题标题】:CakePHP Auth retrieve extra dataCakePHP Auth 检索额外数据
【发布时间】:2010-01-23 21:42:01
【问题描述】:

我刚学CakePHP,不好意思

我正在使用带有 UsersController 的 CakePHP 1.2.5 Auth 组件。用户模型包含两个表:

class User extends AppModel {
    var $name = 'User';
    var $belongsTo = 'Company';
}

调用 login() 时,我看到 SQL 日志中正在检索数据(正在执行 LEFT JOIN),因此模型看起来是正确的,但 Auth 仅存储来自 users 表的数据并删除其他所有内容。以后如何在不进行额外查询的情况下检索公司数据?

【问题讨论】:

    标签: php cakephp authentication cakephp-1.2


    【解决方案1】:

    或者如果你像我一样不习惯修改核心库,你也可以这样做......

    在您的UsersController.login 操作中

    function login() {
        if ($this->Auth->user()) {
            $Session->write('Company', $this->User->Company->findById($this->Auth->user('id')));
            $this->redirect($this->Auth->redirect());
        }
    
    }
    

    您可以使用控制器上的$this->Session->read('Company.name') 和视图上的$session->read('Company.name') 访问公司详细信息。不要忘记添加Session 组件和助手。

    【讨论】:

    • 如果你写信给Auth.User.Company会话密钥可能会更方便。这将允许您使用 AuthComponent 包装器方法来访问会话值:$this->Auth->user('Company.field');
    • 适用于数据库复杂的情况的好方法!例如,如果你有类似User HABTM Company (with => CompaniesUser) 的东西。对于 OP 的案例场景,$this->Auth->authenticate('Form' => array('contain' => array('Company', ...))) 中的一个简单的contain(当然安装了可包含的行为)。 Authentication docs编辑: 我确实意识到答案是蛋糕 1.2。我的建议是 cake 2.x(这就是为什么它是评论而不是答案!)
    【解决方案2】:

    在第819行的cake/libs/controller/components/auth.php中,应该是

    $data = $model->find(array_merge($find, $conditions), null, null, 0);
    

    试试改成

    $data = $model->find(array_merge($find, $conditions), null, null, 1);
    

    基本上将递归设置为1 在其他一些地方可能也需要这样做。

    【讨论】:

      【解决方案3】:

      比改变核心更好,尝试可包含的行为:http://book.cakephp.org/view/474/Containable。页面底部附近有一个用户/个人资料/示例。

      【讨论】:

        猜你喜欢
        • 2019-04-04
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 2017-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多