現在、コントローラのいずれかのアクションに対するAJAXリクエストにより、フルページのHTMLが返されます。Zend Framework 2:Ajaxコールの自動無効化レイアウト
私は、その特定のアクションのHTML(.phtmlコンテンツ)を返すだけです。
次のコードは、不十分手動で特定のアクションのためにレイアウトを無効にすることで問題を解決:
$viewModel = new ViewModel();
$viewModel->setTerminal(true);
return $viewModel;
は、どのように私はAJAX要求が検出されたときに、私のアプリケーションが自動的にレイアウトを無効にすることができますか?これにカスタム戦略を書く必要がありますか?これを行う方法に関するアドバイスは非常に高く評価されます。
また、私のアプリModule.phpで次のコードを試しました.AJAXが正しく検出されていますが、setTerminal()はレイアウトを無効にしていません。
public function onBootstrap(EventInterface $e)
{
$application = $e->getApplication();
$application->getEventManager()->attach('route', array($this, 'setLayout'), 100);
$this->setApplication($application);
$this->initPhpSettings($e);
$this->initSession($e);
$this->initTranslator($e);
$this->initAppDi($e);
}
public function setLayout(EventInterface $e)
{
$request = $e->getRequest();
$server = $request->getServer();
if ($request->isXmlHttpRequest()) {
$view_model = $e->getViewModel();
$view_model->setTerminal(true);
}
}
考えられますか?
ありがとう、Sam - 私はまた、アプリのModule.phpで試したアプローチを含めるように私の投稿を更新しました。なぜsetTerminal()がViewModelに影響を与えていないのでしょうか? –
私の推測では、onBootstrapはViewModel()がまだ存在しません。考えられるのは、コントローラにterminal(true)のviewModelを注入し、これを出力に使用することでしょう。 – Sam