Cakephp AuthComponent::用户(';id';)未返回正确的数据

Cakephp AuthComponent::用户(';id';)未返回正确的数据,cakephp,cakephp-2.3,Cakephp,Cakephp 2.3,在我的AppModel中,我有一个beforeSave函数: public function beforeSave($options = array()) { if (!empty($this->data[$this->alias]['created'])) { $this->data[$this->alias]['created'] = date('Y-m-d G:i:s'); $this->

在我的AppModel中,我有一个beforeSave函数:

    public function beforeSave($options = array()) {
        if (!empty($this->data[$this->alias]['created'])) {
            $this->data[$this->alias]['created'] = date('Y-m-d G:i:s');
            $this->data[$this->alias]['modified'] = $this->data[$this->alias]['created'];
        } else {
            $this->data[$this->alias]['modified'] = date('Y-m-d G:i:s');
        }
        $this->data[$this->alias]['modified_by'] = AuthComponent::user('id');

        return true;
    }

这是一个简单的函数,它只记录创建和修改的日期,并将字段modified_by设置为当前登录用户的id。或者至少这是它应该做的,除了获取当前登录用户的id之外,一切都正常,我不知道为什么,因为据我在文档中所知,这正是它应该被调用的方式。

为什么不从


CakeSession::read('Auth.User.Id)?

我认为应该在AppControlle::beforeFiler()方法中设置用户Id,而不是在AppModel中

$this->data[$this->modelClass]['modified_by'] = $this->Auth->User('id');

我解决了我的问题,我觉得有点傻,但我想我会把它添加到这里,以防其他人遇到同样的问题

在我的新闻模型中,我也调用了beforeSave函数,但我忘记了其中的一行,即
parent::beforeSave()。我不知道beforeSave函数中的日期是如何工作的,但这解决了我的beforeSave函数部分不工作的问题


感谢大家在此问题上的帮助,非常感谢。

您是否尝试转储由
AuthComponent::user('id')返回的值。
?它实际上返回了一个id吗?如果是这种情况,您是否将a传递给您的
Model::save*()
调用?0会一直输入数据库中的“修改的_by”字段。这是我对save的调用,$this->News->save($this->request->data['News'])那么
AuthComponent::user('id')
是否实际返回
0
?如果没有,您是否检查了SQL调试输出,生成的
INSERT/UPDATE
查询是什么样子的?显然它没有输入任何内容。查询中没有字段被修改,因此也没有值。但我仍然不明白为什么。只需检查表中的
modified_by
的数据类型,可能大小很小。因为如果
AuthComponent
实现或会话密钥设置更改,这将停止工作,因为它不适用于无状态身份验证,并且假设它将访问所需的值,这对实际问题没有任何影响。即使实现发生更改,我认为该值仍将存储在Auth.User中,因为无论现在还是以后,都有意义。如果它可以访问所需的值,那么您还试图解决什么其他潜在问题?无论它是否合理,都不应该依赖内部,这就是为什么通过
AuthComponent
API进行抽象访问的原因。我没有试图解决任何问题,我不是OP,我只是试图帮助他解决他的问题,对于这个问题,他试图存储的值是通过
AuthComponent
API获取还是直接通过
CakeSession
API获取(假设后者访问相同的值)都没有区别@ndm你是对的,一个人不应该依赖内部。我将更深入地了解,如果您可以从AuthComponent app wide访问它,为什么他们会将其放在会话中(对吗?)我正要问这个问题,因为我刚刚意识到代码在
AppModel
(应该更仔细地阅读该问题)。。。仅供参考,如果它们是
datetime default null
列,请正确使用CakePHP。@ndm那么,你是说我可以删除执行该操作的代码?那很酷,我不知道。谢谢你的小道消息。