【问题标题】:How to disable cache for dynamic information in slots in Symfony 1.4如何在 Symfony 1.4 中禁用插槽中动态信息的缓存
【发布时间】:2012-08-17 07:37:38
【问题描述】:

我正在 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 缓存。

【问题讨论】:

    标签: caching symfony1 doctrine symfony-1.4 slots


    【解决方案1】:

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

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

    更多的是解决方法而不是解决方案。很想知道如何按需自动清除 facebook 缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      相关资源
      最近更新 更多