我正在尝试关闭 zfc-admin 中某些控制器的布局。不幸的是,我发现的所有方法都恰恰相反。关闭视图并加载布局。
例如。
$viewModel = new ViewModel();
$viewModel->setTerminal(true);
return $viewModel;
ZfcAdmin 的配置中是否存在干扰 setTerminal() 方法的常规功能的内容?
我正在尝试关闭 zfc-admin 中某些控制器的布局。不幸的是,我发现的所有方法都恰恰相反。关闭视图并加载布局。
例如。
$viewModel = new ViewModel();
$viewModel->setTerminal(true);
return $viewModel;
ZfcAdmin 的配置中是否存在干扰 setTerminal() 方法的常规功能的内容?
作为另一个临时解决方案,您可以编辑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 修复错误时,您可以使用他们的解决方案覆盖模块。
您在问题中提供的代码会禁用布局渲染并仅输出操作视图。
你能澄清你的问题..?
作为临时解决方案,按照 Jurian Sluiman 的评论,当您想要禁用布局时,您可以在调用所需操作时简单地将 get 参数添加到 (/?disableLayout=true),并在布局中
if (isset($_GET['disableLayout']) && $_GET['disableLayout'] == 'true') die();
或类似的东西(根据您的需要调整)