如何在Symfony 1.4中的插槽中禁用动态信息的缓存

时间:2012-08-17 07:37:39

标签: caching symfony1 doctrine symfony-1.4 slots

我正在使用Symfony 1.4 Doctrine 1.2构建音乐应用程序。我正在使用插槽来自定义我的布局标题中的facebook api元标记。例如,当我浏览歌曲页面时,歌曲的showSuccess将有一个像下面那样的插槽,它会根据歌曲的动态信息填充布局标题元标记。

<?php slot('fb_metaproperty_title') ?>
<meta property="og:site_name" content="abc"/>
<meta property="og:title" content="<?php echo $songs['song_name'].' by '.$songs['full_name'] ?>"/>
<meta property="og:type" content="song" />
<meta property="og:description" content="This song is currently ranked <?php echo $songOverallRank?>th" />
<meta property="og:url" content="<?php echo $linktosongpage ?>"/>
<meta property="og:image" content="<?php echo $images[0]?>"/>
<?php end_slot() ?>

问题是我打开了缓存并且$songOverallRank变量缓存在插槽中,以便排名值过时(因为它经常更改)。相同的$songOverallRank变量在插槽正下方(但在插槽之外)的代码中是最新的。由于某种原因,只是缓存槽值并且过时了。

我查看了有关如何手动删除缓存值的symfony文档,这看起来非常麻烦。

是否有简单的配置或方法来禁用插槽的缓存?有没有一个解决方案来确保槽没有被缓存,并且变量被拉出与模板的其余部分(具有最新值)完全相同?

如果有帮助,我将sfMemcacheCache用于view_cache/results_cache,将APC用于sfPatternRouting缓存。

1 个答案:

答案 0 :(得分:0)

我找到了问题的原因。它不是缓存值的插槽。实际上是Facebook正在缓存元标记信息。该插槽提供了最新的值,但facebook元标记只是在Facebook中显示旧数据。为了清除facebook元标记的缓存,我必须手动输入到facebook调试器(linter)的链接。

手动键入每个链接以清除缓存不是一个可扩展的解决方案,所以我决定不将动态数据放在facebook元标记内。

更多的工作而不是解决方案。很想知道如何根据需要自动清除facebook缓存。