2012-08-17 75 views
1

我在Symfony 1.4 Doctrine 1.2中构建了一个音乐应用程序。我正在使用插槽来定制我的布局标题中的facebook api元标记。例如,当我浏览歌曲页面时,该歌曲的showSuccess将具有如下所示的插槽,该插槽使用动态信息填充布局标题元标记,具体取决于它是哪首歌曲。如何在Symfony 1.4插槽中禁用缓存动态信息

<?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

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

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

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