1

我正在 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 文档,这似乎很麻烦。

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

如果有帮助,我正在使用sfMemcacheCacheforview_cache/results_cache和 APC 进行sfPatternRouting缓存。

4

1 回答 1

0

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

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

与其说是解决方案,不如说是一种解决方法。很想知道如何按需自动清除 facebook 缓存。

于 2012-08-18T02:21:03.230 回答