0

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

例如。

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

ZfcAdmin 的配置中是否存在干扰 setTerminal() 方法的常规功能的内容?

4

3 回答 3

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 修复错误时,您可以使用他们的解决方案覆盖模块。

于 2012-11-26T17:06:25.253 回答
0

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

你能澄清你的问题..?

于 2012-11-20T14:49:28.673 回答
0

作为临时解决方案,按照 Jurian Sluiman 的评论,当您想要禁用布局时,您可以在调用所需操作时简单地将 get 参数添加到 (/?disableLayout=true),并在布局中

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

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

于 2012-11-23T10:07:04.933 回答