我正在寻找一种更改视图模板(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
。看起来这种方式正在清除该操作的所有变量。
如何让它运作?
答案 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');
这仅适用于在特定操作中更改布局。