在我的一个模型中,我使用文件缓存来记住预处理数据,以加快列表视图。
在我的回调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
答案 0 :(得分:0)
所以我找到了问题的原因:
是的,调用了回调。 是的,写了缓存。
但: 所有在连接模型的数据写入之前发生的事情,因此这些模型的信息不能通过afterSave保存在缓存中。
我会将缓存写入模型,并在将所有其他数据保存到数据库后从控制器调用它。这应该可以解决问题。
CalamityJane