我正在使用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
缓存。
答案 0 :(得分:0)
我找到了问题的原因。它不是缓存值的插槽。实际上是Facebook正在缓存元标记信息。该插槽提供了最新的值,但facebook元标记只是在Facebook中显示旧数据。为了清除facebook元标记的缓存,我必须手动输入到facebook调试器(linter)的链接。
手动键入每个链接以清除缓存不是一个可扩展的解决方案,所以我决定不将动态数据放在facebook元标记内。
更多的工作而不是解决方案。很想知道如何根据需要自动清除facebook缓存。