Zend framework2 setTerminal删除内容而不是布局

Zend framework2 setTerminal删除内容而不是布局,zend-framework2,Zend Framework2,嗨,我有一个zf2应用程序。 在我的模块中,我将侦听器附加到MvcEvent::EVENT\u DISPATCH事件。 在这个监听器中,我检查用户是否经过身份验证等。 如果用户经过身份验证,我将更改布局 现在,如果在我的操作中调用$viewModel->setTerminal(true),则不会显示任何内容,只显示布局,但我需要相反的方式 这个答案多少解释了我的想法,但我并不清楚。 另外,提供的解决方案在我的情况下不起作用,因为我必须将这两种方法添加到我的所有控制器中 有人有办法吗 谢谢在布局

嗨,我有一个zf2应用程序。 在我的模块中,我将侦听器附加到
MvcEvent::EVENT\u DISPATCH
事件。 在这个监听器中,我检查用户是否经过身份验证等。 如果用户经过身份验证,我将更改布局

现在,如果在我的操作中调用
$viewModel->setTerminal(true)
,则不会显示任何内容,只显示布局,但我需要相反的方式

这个答案多少解释了我的想法,但我并不清楚。 另外,提供的解决方案在我的情况下不起作用,因为我必须将这两种方法添加到我的所有控制器中

有人有办法吗


谢谢

在布局侦听器中,在设置布局之前,您需要应用一些条件逻辑来确定控制器返回的视图模型是否为终端

这可以通过从侦听器中的
MvcEvent
获取结果,并检查它是否是一个不
terminate()的
ViewModel
实例来实现

注意:您需要确保布局侦听器具有足够低的优先级(>=-10似乎足够),以便在测试条件之前,控制器操作已实际返回视图模型

public function yourLayoutListenerCallback(MvcEvent $e)
{
    // get the dispatched result from the event 
    $result = $e->getResult();
    // check it's a view model that doesn't terminate 
    if (!$result instanceof \Zend\View\Model\ViewModel || $result->terminate()) {
        // do nothing
        return;
    }
    // your existing layout logic ....
}