Żądanie AJAX do jednej z moich akcji kontrolera obecnie zwraca cały HTML strony.Zend Framework 2: Automatyczne wyłączanie układu dla wywołań ajaxowych
Chcę tylko, aby zwrócił HTML (zawartość .phtml) dla tej konkretnej akcji.
Poniższy kod słabo rozwiązuje ten problem, ręcznie wyłączając układ dla danego działania:
$viewModel = new ViewModel();
$viewModel->setTerminal(true);
return $viewModel;
Jak mogę uczynić moją aplikacja automatycznie wyłącza układ po wykryciu żądania AJAX? Czy muszę napisać do tego niestandardową strategię? Wszelkie porady dotyczące tego są bardzo cenne.
Dodatkowo, wypróbowałem poniższy kod w mojej aplikacji Module.php - wykrywa poprawnie AJAX, ale setTerminal() nie wyłącza układu.
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);
}
}
Myśli?
Dzięki, Sam - zaktualizowałem również mój post, aby uwzględnić podejście, które wypróbowałem dzięki aplikacji Module.php. Wszelkie myśli na temat, dlaczego setTerminal() nie ma wpływu na ViewModel? –
Zgaduję, że onBootstrap nie ViewModel() jest jeszcze obecny, pomysłem byłoby wstrzyknąć viewModel z terminalem (true) do kontrolera i użyć tego do wyjścia (czy mam jakiś sens?) – Sam