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のドキュメントを確認しましたが、かなり面倒です。

スロットのキャッシュを無効にする簡単な構成または方法はありますか? スロットがキャッシュされておらず、変数がテンプレートの残りの部分 (最新の値を持つ) とまったく同じようにプルされることを確認するソリューションはありますか?

それが役立つ場合は、キャッシュsfMemcacheCacheに forview_cache/results_cacheと APC を使用しています。sfPatternRouting

4

1 に答える 1

0

問題の原因がわかりました。値をキャッシュしていたのはスロットではありませんでした。メタ タグ情報をキャッシュしていたのは、実際には Facebook でした。スロットは最新の値を提供していましたが、facebook メタ タグは facebook の古いデータを表示していました。Facebook メタ タグのキャッシュをクリアするには、リンクを Facebook デバッガー (リンター) に手動で入力する必要がありました。

各リンクを手動で入力してキャッシュをクリアするのはスケーラブルなソリューションではないため、動的データを facebook メタ タグ内に配置しないことにしました。

解決策というよりも回避策です。オンデマンドで Facebook のキャッシュを自動的にクリアする方法を知りたいです。

于 2012-08-18T02:21:03.230 に答える