CakePHP 2.4:使用insert更新缓存失败,但在更新时失败

时间:2014-02-25 15:04:31

标签: cakephp caching callback cakephp-2.3

在我的一个模型中,我使用文件缓存来记住预处理数据,以加快列表视图。

在我的回调afterSave()中,我调用应该强制更新或创建缓存条目的方法,但由于某些原因,它只适用于更新,但不适用于创建。

以下是代码:

public function afterSave($created, $options = array())
{
    exec('sudo /root/tools/sync-home-wap-GKM.sh');
    $content = $this->findById($this->id);
    $this->enhanceContent($content, true);
}

重要的调用是enhanceContent($ content,true),它生成附加数据或从缓存中获取数据。 true初始化缓存的强制更新(至少我希望如此)。

private function enhanceContent($content, $bForce = false)
{
    if (!isset($content['Content']['id']))
            throw new NotFoundException(__('Invalid Content Array: '.$content));
    if ($bForce)
            Cache::delete('ContentPretty'.$content['Content']['id'], 'long');
    $contentpretty = Cache::read('ContentPretty'.$content['Content']['id'], 'long');
    if ($contentpretty === false) {
        $content['Content']['preview'] = $this->getImageName(
            (int)$content['Content']['objnbr'], 'small', false
        );
        .... Do a lot of other things not important
        Cache::write('ContentPretty'.$content['Content']['id'], $content['Content'], 'long');
    } else {
        $content['Content'] = $contentpretty;
    }
    //debug($content);
    return $content;
}

有没有人知道为什么添加新内容后列表的数据不存在,但在编辑相同的内容并再次保存后是否存在?

感谢您的任何提示!

Calamity Jane

1 个答案:

答案 0 :(得分:0)

所以我找到了问题的原因:

是的,调用了回调。 是的,写了缓存。

但: 所有在连接模型的数据写入之前发生的事情,因此这些模型的信息不能通过afterSave保存在缓存中。

我会将缓存写入模型,并在将所有其他数据保存到数据库后从控制器调用它。这应该可以解决问题。

CalamityJane