Zend 2:如何更改特定操作的模板?

时间:2016-07-29 09:18:36

标签: zend-framework2

我正在寻找一种更改视图模板(NOT layout)的方法,但我无权访问此模块(它是供应商的一部分),所以我不能这样做:

$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->form我得null。看起来这种方式正在清除该操作的所有变量。

如何让它运作?

2 个答案:

答案 0 :(得分:0)

您可以将其他库中的模板替换为模板。需要在配置文件config/application.config.php中的库之后设置模块。

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

在视图管理器配置中,需要更改模板的路径以获取其他库的模板名称。

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

答案 1 :(得分:0)

在具体操作中,您可以切换默认布局:

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

这仅适用于在特定操作中更改布局。