2012-01-09 7 views
0

をエコーせずに出力を認識しませんので、私は(後のブートストラップに移動されます、私は推測する)自分の行動に次のコードを追加しました:Zend_Cache_Frontend_Pageは、私は、Zend_Cacheによる周りいじるしようとしています

$frontendOptions = array(
    'lifetime' => 7200, 
    'debug_header' => true, // für das Debuggen 
    'default_options' => array(
     'cache' => true, 
     'cache_with_get_variables' => true, 
     'cache_with_session_variables' => true, 
     'cache_with_cookie_variables' => true, 
     'cache_with_post_variables' => true, 
    ) 
); 

$backendOptions = array(
    'cache_dir' => '/tmp/' 
); 

$cache = Zend_Cache::factory('Page', 'File', 
    $frontendOptions, $backendOptions 
); 
echo "hej"; 
var_dump($cache->start('someid')); 

Zendのキャッシュを生成し、ファイルはhejbool(false)が含まれていますが、それ以外は私のページをキャッシュしません。 zendフレームワークに関するドイツの本によれば、の偽がある場合、のキャッシュがない場合は、となります。 trueは、キャッシュが見つかった場合にのみ返されます。

私はZend_Cache_Frontend_Page.phpの中で直接デバッグしましたが、start()メソッドの最下部まで下がりました。何も間違っていない(idが与えられていて)キャッシュが見つかりませんでした。これは完了しました(私は/tmp/で見ることができます)が、必要なコンテンツはありません。

なぜ、Zend_Viewの出力をキャッシュしないで、echoを経由して直接出力するだけですか?

私はビューをレンダリングする明示的な関数を呼び出しませんが、これはもう必要ないようです(私のビューは常にコントローラとアクションに従って自動的にレンダリングされます)。私は標準的なXHTMLテンプレート(index.phtml)とRSSテンプレート(index.rss.phtml)の両方を試しました。

アイデア?他のコードの断片が必要ですか?

+0

がありますあなたのブートストラップに 'Zend_Controller_Front :: getInstance() - > setParam( 'disableOutputBuffering'、true)'を追加するか、アプリケーションの設定ファイルに 'resources.frontController.params.disableOutputBuffering = true'を追加しましたか? – vstm

+0

これは簡単だったと思った;)答えとして追加して、これを解決した印を付けて、あなたにいくつかのクレジットを与えることができる。 – Aufziehvogel

答えて

1

Zend_Cache_Frontend_Pageを使用する場合は、disableOutputBufferingオプションを有効にする必要があります。理由は、Zend_Cache_Frontend_Pageob_startをコールバックで使用し、ob_startの最初の呼び出しでなければならないからです。それ以外の場合は、遭遇した異常な動作につながります。あなたは

(ここではINI形式の設定で)あなたのfrontControllerセットアップ後
Zend_Controller_Front::getInstance()->setParam('disableOutputBuffering', true); 

または構成ファイルを使用して、あなたのブートストラップでそれを設定するか、それを有効にするには

resources.frontController.params.disableOutputBuffering = true