これがZF2のバグなのか、それともよくわからないだけなのかはわかりませんが、なぜこれが起こっているのか非常に興奮しています.
Dispatch イベントを添付して、各モジュールのレイアウトをグローバルに変更するソリューションを使用しています。(たとえばhttp://framework.zend.com/manual/2.1/en/modules/zend.view.quick-start.html#dealing-with-layouts、最後の例から)
それはうまくいっていますが、問題は、あるアクションでsetTerminate(true);したいときです。(Ajax 呼び出しの場合)コントローラー/アクションテンプレートのコンテンツのみを表示するのではなく、コンテンツのないレイアウト テンプレートのみを表示します。そして、それは私が期待していないことです。
これは、これをシミュレートする方法であり、ディスパッチ関数でレイアウトを設定し(イベントを添付する代わりに、よりクリーンにする)、コントローラーのアクションで setTerminate します。
public function dispatch(Request $request, Response $response = null)
{
parent::dispatch($request, $response);
$this->layout('layout/new');
}
public function indexAction()
{
$model = new ViewModel();
$model->setTerminal(true);
return $model;
}
繰り返しますが、これはコントローラー/インデックステンプレートのコンテンツのみを表示することを期待していますが、その代わりに、コンテンツのないレイアウト/新規のコンテンツのみを表示します。
レイアウトを実際に設定しようとしましたが、期待どおりに機能しました。
public function indexAction()
{
$this->layout('layout/new');
$model = new ViewModel();
$model->setTerminal(true);
return $model;
}
これは機能しています。コントローラ/インデックステンプレートのコンテンツのみが表示され、レイアウトは表示されません。
したがって、各コントローラーのレイアウトをグローバルに (dispatch イベントをアタッチすることにより) 変更する場合、これらのコントローラーの 1 つを Ajax 呼び出しに使用して setTerminate を使用するまで機能します。
助けてくれてありがとう。