2012-01-31 5 views
0

レイアウトリソースをブートストラップし、いくつかのビューヘルパーを登録するBoostrapにメソッドを作成しなければなりませんでした。レイアウトリソースのブートストラップ後にレイアウトに変数を渡す

protected function _initViewHelpers() { 
    $this->bootstrap('layout'); 
    $layout = $this->getResource('layout'); 
    $view = $layout->getView(); 

    $view->registerHelper(new Application_View_Helper_LoadMenu, 'loadMenu'); 
    $view->registerHelper(new Application_View_Helper_InfoLink, 'infoLink'); 
    $view->registerHelper(new Application_View_Helper_InfoData, 'infoData'); 
} 

今、私は(Zend_Viewのインスタンスに、いつものように)レイアウトにいくつかの変数を渡していますが、レイアウトが、それはそれらを持っていることを認識しません。

ヘルパーを登録するコードをコントローラのinit()メソッドに移動すると、すべてが正常です。それはZFエラーですか、それとも間違っていましたか?

答えて

0

(またはビューを持っている場所)

$view->layout()->some_var = "Some Value"; 

ます。レイアウトで

<?php echo $this->layout()->some_var; ?> 

私はあなたの質問に私が知っているの一部が欠けていた場合。

編集:上記に失敗した場合、これを行うもう1つの正しい方法は、プレースホルダヘルパーを使用することです(http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view .helpers.initial.placeholder)

編集2:ビューをブートストラップしていることを確認してください。

$this->bootstrap('view'); 
$view = $this->getResource('view'); 
0

setView()メソッドを直接またはおそらくZend_View_Helper_Abstractのサブクラスとして実装していますか?

Zend_View_Abstract::registerHelper($helper, $name)メソッドのコードを見ると、ヘルパーでsetView()メソッドが存在するかどうかが確認されます。そのようなメソッドが見つかった場合は$helper->setView($this)を呼び出します。ここで$this$viewです。

ここで接続が行われます。この呼び出しがない場合、ビューはヘルパーを認識しますが(結局は登録しただけです)、ヘルパーはビューを認識しないように見えます。ヘルパーがビューにアクセスしようとすると、の新しいビューオブジェクトが作成されますが、これはブートストラップで設定したビューオブジェクトではありません。

tl; dr:おそらくヘルパーを明示的に登録する必要はありません。デフォルトのresource-autoloaderを使用し、使用しているようなクラス/メソッドの命名規則を使用すると、おそらく組み込みのプラグイン・ローダーがすべてのインスタンス化を処理できるようになります。あなたのレイアウトやビュースクリプトで$this->myHelperMethod()と呼ぶだけですごくいいはずです。コントローラ内で

関連する問題