【问题标题】:zend framework 3 - how to disable layout for entire controllerzend framework 3 - 如何禁用整个控制器的布局
【发布时间】:2019-02-18 14:12:27
【问题描述】:

在 Zend Framework 3 中,是否可以禁用整个控制器的布局,最好是在 __construct()onDispatch() 方法中?

我知道我可以禁用特定操作的布局,例如:

public function indexAction()
{
    $view = new \Zend\View\Model\ViewModel();
    $view->setTerminal(true);
    return $view;
}

但是,我想禁用控制器中所有操作的布局,而不必在每个操作中复制和粘贴上述代码。

【问题讨论】:

    标签: php layout zend-framework3


    【解决方案1】:

    在您的模块类中:

    public function onBootstrap(MvcEvent $e)
    {
        $sharedEvents = $e->getApplication()
            ->getEventManager()
            ->getSharedManager();
        $sharedEvents->attach(__NAMESPACE__, 'dispatch',
            function ($e) {
                if ($e->getRouteMatch()->getParam('controller') == '[your controller name in lowercase]') {
                    $result = $e->getResult();
                    if ($result instanceof \Zend\View\Model\ViewModel) {
                        $result->setTerminal(true);
                    } else {
                        throw new \Exception(
                          __METHOD__ . ' expected \Zend\View\Model\ViewModel');
                    }
                }
            });
    }
    

    【讨论】:

    • 谢谢。我希望有一个更好的解决方案,不会被每个控制器调用。我不会使用它,但我认为它有效。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    相关资源
    最近更新 更多