我正在尝试关闭zfc-admin中某些控制器的布局。不幸的是,我发现的所有方法恰恰相反。关闭视图并加载布局。
例如
$viewModel = new ViewModel();
$viewModel->setTerminal(true);
return $viewModel;
ZfcAdmin配置中的某些内容会干扰setTerminal()方法的常用功能吗?
答案 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();
或类似的东西(根据您的需要调整)