2016-07-29 12 views
0

私は、ビューテンプレート(NOTレイアウト)を変更する方法を探していますが、私は、このモジュール(それはベンダーの一部です)へのアクセスを持っていないので、私は行うことはできません。Zend 2:特定のアクションのテンプレートを変更するにはどうすればよいですか?

$view = new ViewModel(); 
$view->setTemplate($template); 

それ私が何かの出来事につけることでそれをやることができればいいだろう。

私は、次のコードを試してみる:

public function onBootstrap(MvcEvent $e) 
{ 
    $eventManager  = $e->getApplication()->getEventManager(); 
    $eventManager->getSharedManager()->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function($e) { 
     $controller  = $e->getTarget(); 
     $routeMatch  = $e->getRouteMatch(); 
     $routeName  = $routeMatch->getMatchedRouteName(); 
     if ($routeName === 'login') { 
      $controller->layout('layout/layout'); 
      $e->getViewModel()->setTemplate('views/login'); 
     } 
    }, 1); 
    $moduleRouteListener = new ModuleRouteListener(); 
    $moduleRouteListener->attach($eventManager); 
} 

をしかし、それはそのように動作していないように思えます。つまり、レイアウトが変更されてビューテンプレートが変更されたとします。たとえば、次のように試してみてください。 $this->formnullが表示されます。このように見えるのは、そのアクションからすべての変数をクリアすることです。

どのように動作させるには?

+0

コントローラの変数をビューにどのように設定しますか? – Hooli

答えて

0

他のライブラリのテンプレートをテンプレートに置き換えることができます。構成ファイルconfig/application.config.phpのライブラリからモジュールの後にモジュールをセットアップする必要があります。ビューマネージャの設定で

'modules' => array(
    'VendorModule', 
    'YourModule' 
); 

他のライブラリのテンプレート名用のテンプレートへのパスを変更する必要が。

'view_manager' => array(
    'template_map' => array(
     'vendor/library/template_name' => __DIR__ . '/your_template.phtml', 
    ) 
) 
0

特定のアクションでは、デフォルトのレイアウトを切り替えることができます

$this->layout('layout/your-second-layout'); 

これはレイアウトが特定のアクションに変更するだけです。