我的zendframework 2应用程序中有一个包含两个控制器的模块。 我想为控制器的一个操作设置不同的布局。 有没有办法在模块配置文件中设置它?
P.s:我只是尝试使用以下命令在控制器的__CONSTRUCT方法中设置它,但它只是没有用!
$event = $this->getEvent();
$event->getViewModel()->setTemplate('layout/MYLAYOUT');
但如果我在我的控制器的每个动作中使用上述命令,它就可以正常工作。
答案 0 :(得分:3)
请参阅akrabat's examples了解一些可以轻松调整布局,视图等的好方法。
具体您可以在his github here找到您想要的内容。
以下是控制器动作方法的剪切粘贴,用于设置/使用备用布局:
public function differentLayoutAction()
{
// Use a different layout
$this->layout('layout/different');
return new ViewModel();
}
编辑:看起来akrabat有一个示例Change the layout for every action within a module
,这可能是在配置中设置布局的最佳指针;但我只是看了一下代码,这个例子目前尚未完成,它没有改变布局。
答案 1 :(得分:2)
我可以指出你正确的方向,因为目前我无法打开示例项目。 Evan Coury发布了一种模块特定布局的方法。请参阅以下链接:
Module Specific Layouts in Zend Framework 2
<?php
namespace MyModule;
use Zend\ModuleManager\ModuleManager;
class Module
{
public function init(ModuleManager $moduleManager)
{
$sharedEvents = $moduleManager->getEventManager()->getSharedManager();
$sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) {
// This event will only be fired when an ActionController under the MyModule namespace is dispatched.
$controller = $e->getTarget();
$controller->layout('layout/alternativelayout');
}, 100);
}
}
现在这对你有什么帮助?:嗯,$controller
应该同时存储被叫控制器和动作。我确定你可以检查$controller
被调用的动作,然后相应地分配布局。
对不起,我现在只能暗示你的方向,但我相信这可以让你开始。
答案 2 :(得分:0)
<?php
namespace MyModule;
use Zend\ModuleManager\ModuleManager;
class Module
{
public function init(ModuleManager $moduleManager){
$sharedEvents = $moduleManager->getEventManager()->getSharedManager();
$sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) {
$controller = $e->getTarget();
if ($controller instanceof Controller\AltLayoutController) {
$controller->layout('layout/alternativelayout');
}
}, 100);
}
我