2

現在、他のすべてのコントローラーが拡張する BaseController の onDispatch メソッドを使用して、アプリ全体の layout.phtml で使用される変数をいくつか設定しています。

public function onDispatch(MvcEvent $e) 
{

    $config = $this->getServiceLocator()->get('config');
    $this->layout()->setVariable('platformName', $config['platform']['name']);
    $this->layout()->setVariable('platformYear', $config['platform']['year']);
}

いくつかのエラー ページをテストして、ベース コントローラーを使用していないため、これらのページに変数が提供されないことが判明するまで、これは正常に機能します。

この問題を回避し、エラー ページに同じ変数を提供するにはどうすればよいですか?

4

2 に答える 2

2

リッスンしているイベントを変更します。

この場合、このロジックをアプリケーションのブートストラップ イベントまたはアプリケーションのレンダリング イベントに移動します (これはテストしていませんが、おそらく問題なく動作するでしょう)。

一例として、Module.php で

public function onBootstrap($e)
{
    $config = $e->getApplication()->getServiceManager()->get('config');
    //$e->getViewModel()->setVariable();
}

コメントアウトされた行をテストしていませんが、正しい方向に向かうはずです。

編集: render イベントの使用例を見つけました

public function onBootstrap($e)
{
    $event = $e->getApplication()->getEventManager();

    $event->attach('render', function($e) {
        $config = $e->getApplication()->getServiceManager()->get('config');
        $e->getViewModel()->setVariable('test', 'test');
    });
} 
于 2013-09-13T00:40:50.987 に答える