zfc-admin で一部のコントローラーのレイアウトをオフにしようとしています。残念ながら、私が見つけたすべての方法は正反対です。ビューをオフにして、レイアウトをロードします。
例えば。
$viewModel = new ViewModel();
$viewModel->setTerminal(true);
return $viewModel;
setTerminal() メソッドの通常の機能を妨げる ZfcAdmin の設定に何かありますか?
zfc-admin で一部のコントローラーのレイアウトをオフにしようとしています。残念ながら、私が見つけたすべての方法は正反対です。ビューをオフにして、レイアウトをロードします。
例えば。
$viewModel = new ViewModel();
$viewModel->setTerminal(true);
return $viewModel;
setTerminal() メソッドの通常の機能を妨げる ZfcAdmin の設定に何かありますか?
別の一時的な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();
または同様のもの(ニーズに合わせて調整してください)