フラグメントキャッシュまたはページキャッシュを使用する場合、一部の部分を除いて全体の出力が静的である状況によく遭遇します。たとえば、ヘルプ ページには静的なヘルプ情報が表示される場合がありますが、表示されるユーザー名は現在のユーザーの名前です。
この問題を解決するには、ユーザー名に基づいてキャッシュの内容を照合することができますが、キャッシュの内容のほとんどはユーザー名を除いて同じであるため、これは貴重なスペースの大幅な無駄になります。 Web ページをいくつかのフラグメントに分割し、個別にキャッシュすることもできますが、この状況ではページとコードが非常に複雑になります。より良い方法は、[CController] が提供する 動的コンテンツ 機能を使用することです。
動的コンテンツとは、フラグメント出力がフラグメント キャッシュに含まれていてもキャッシュされないことを意味します。含まれるコンテンツがキャッシュから取得された場合でも、動的コンテンツを常に動的に保つためには、毎回再生成する必要があります。このため、何らかのメソッドまたは関数を通じて動的コンテンツを生成する必要があります。
CController::renderDynamic() を呼び出して、必要な場所に動的コンテンツを挿入します。
...别的HTML内容... <?php if($this->beginCache($id)) { ?> ...被缓存的片段内容... <?php $this->renderDynamic($callback); ?> ...被缓存的片段内容... <?php $this->endCache(); } ?> ...别的HTML内容...
上記の $callback
は、有効な PHP コールバックを指します。現在のコントローラー クラスのメソッドまたはグローバル関数を指す文字列名にすることができます。クラスのメソッドを指す配列名にすることもできます。他のパラメータはすべて renderDynamic() メソッドに渡されます。コールバックは、動的コンテンツを表示するだけでなく、動的コンテンツを返します。
上記は、Yii Framework 公式ガイド シリーズ 32 - キャッシュ: 動的コンテンツの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。