如何关闭ZFcAdmin模块中为ZF2加载布局

时间:2012-11-20 13:47:58

标签: php zend-framework2

我正在尝试关闭zfc-admin中某些控制器的布局。不幸的是,我发现的所有方法恰恰相反。关闭视图并加载布局。

例如

$viewModel = new ViewModel();
        $viewModel->setTerminal(true);
        return $viewModel;

ZfcAdmin配置中的某些内容会干扰setTerminal()方法的常用功能吗?

3 个答案:

答案 0 :(得分:1)

作为另一个临时解决方案,您可以编辑ZfcAdmin\Module.php来修复此错误。改变如下:

public function selectLayoutBasedOnRoute(MvcEvent $e)
{
    $app    = $e->getParam('application');
    $sm     = $app->getServiceManager();
    $config = $sm->get('config');

    if (false === $config['zfcadmin']['use_admin_layout']) {
        return;
    }

    $match = $e->getRouteMatch();
    if (!$match instanceof RouteMatch || 0 !== strpos($match->getMatchedRouteName(), 'zfcadmin')) {
        return;
    }

    $layout     = $config['zfcadmin']['admin_layout_template'];
    $controller = $e->getTarget();
    if( ! $controller->getEvent()->getResult()->terminate() ) // Add by Vinicius Garcia, to fix ->setTerminal() bug (https://github.com/ZF-Commons/ZfcAdmin/issues/8)
        $controller->layout($layout);
}

在设置布局之前添加if( ! $controller->getEvent()->getResult()->terminate() )将解决问题。

当然,这是第三方模块的不良做法更改代码,但我想这比在您需要的所有视图中包含额外代码更好...

当ZF-Commons修复错误时,您可以使用他们的解决方案覆盖模块。

答案 1 :(得分:0)

您在问题中提供的代码会禁用布局渲染,只会输出操作的视图。

你能澄清一下你的问题吗?

答案 2 :(得分:0)

作为一个临时解决方案,按照Jurian Sluiman的评论,当你想要禁用布局时,只需在调用所需动作时添加一个get参数(/?disableLayout = true),并在布局中

if (isset($_GET['disableLayout']) && $_GET['disableLayout'] == 'true') die();

或类似的东西(根据您的需要调整)