2016-08-11 6 views
1

コントローラーアクション外のview rendererに汎用変数を割り当てたいとします。Zend Framework 2プロジェクトで共有ビューモデルを作成

私はこれをmodule class bootstrapで処理したいと考えています。

私の質問は、コントローラと共有できるmodule class bootstrapview modelを作成するにはどうすればよいですか。

私の最終結果は、コントローラアクション内に新しいインスタンスを作成する前に、ビューモデルに変数を追加することができます。

ここで私が始めたのは、i cannot add variables to the declared viewmodel and have it persist to the controller's new instance of a view modelです。

ディスパッチ前にビューモデルを作成してレンダラーとして設定する方法はありますか?

ここに私が始めたことがありますが、私がモジュールクラスのブートストラップでそれを得ることができれば、idがそれを好む。

私はこれがうまくいくと思います。あなたはeventオブジェクトへのアクセス権を持っているModule.php

class BaseController extends AbstractActionController 
    { 
     protected $viewModel; 

     public function onDispatch(MvcEvent $e) 
     {  
      $this->viewModel = new ViewModel([ 
       'module' => 'modulename', 
       'controller' => 'controllername', 
       'action' => 'actionname' 
      ]);   
      parent::onDispatch($e); 
     } 
    } 

答えて

0

このイベントでは、このようないくつかの変数を設定することができます。

$event->getViewModel()->setVariable('isAdmin', $isAdmin); 
$event->getViewModel()->setVariable('var', $var); 
$event->getViewModel()->setVariable('form', $form); 
$event->getViewModel()->setVariable('uri', $uri[0]); 

をテストしたい場合はより多くのあなたも行うことができます。

$widgetTemplate = new ViewModel(); 
$widgetTemplate = $widgetTemplate->setTemplate('widget/container'); 
$event->getViewModel()->addChild($widgetTemplate, 'widget'); 

これらの変数は、あなたのlayout.phtmlでご利用いただけます。あなたのコントローラーで同じviewModelが利用可能であるかどうかをテストしませんでした。このソリューションをテストするとフィードバックがあります。

module.phpで定義されている変数については、Zend\Container\Sessionコンポーネントを使用してコントローラーで変更することもできます

関連する問題