ZendFramework 2中的控制器特定布局

时间:2012-10-04 17:31:38

标签: php zend-framework2

我的zendframework 2应用程序中有一个包含两个控制器的模块。 我想为控制器的一个操作设置不同的布局。 有没有办法在模块配置文件中设置它?

P.s:我只是尝试使用以下命令在控制器的__CONSTRUCT方法中设置它,但它只是没有用!

$event = $this->getEvent();
$event->getViewModel()->setTemplate('layout/MYLAYOUT');

但如果我在我的控制器的每个动作中使用上述命令,它就可以正常工作。

3 个答案:

答案 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)

@Sam的回答几乎回答了这个问题。如上所述,只需要检查调用哪个控制器,可以这样做:

<?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);
    }

相关问题