Zend framework 3 - как отключить макет для всего контроллера

Можно ли в Zend Framework 3 отключить макет для всего контроллера, желательно с помощью методов __construct() или onDispatch()?

Я знаю, что могу отключить макет для определенных действий, например:

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

Однако я хотел бы отключить макет для всех действий в контроллере без необходимости копировать и вставлять приведенный выше код в каждое действие.

1
0
230
1

Ответы 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');
                }
            }
        });
}

Спасибо. Я надеялся на лучшее решение, которое вызывается не для каждого контроллера. Я не буду использовать это, но предполагаю, что это работает. Спасибо.

Leo Galleguillos 15.09.2018 22:08

Другие вопросы по теме