Eine AJAX-Anfrage an eine meiner Controller-Aktionen gibt derzeit den HTML-Code der gesamten Seite zurück.Zend Framework 2: Layout für Ajax-Aufrufe automatisch deaktivieren
Ich möchte nur den HTML-Inhalt (.phtml) für diese bestimmte Aktion zurückgeben.
Der folgende Code löst schlecht das Problem, indem manuell das Layout für die jeweilige Aktion zu deaktivieren:
$viewModel = new ViewModel();
$viewModel->setTerminal(true);
return $viewModel;
Wie kann ich den Antrag stellen automatisch das Layout deaktivieren, wenn eine AJAX-Anforderung erkannt wird? Muss ich eine benutzerdefinierte Strategie dafür schreiben? Irgendein Rat, wie man dies tut, wird sehr geschätzt.
Zusätzlich habe ich den folgenden Code in meiner App Module.php versucht - es erkennt AJAX korrekt, aber die SetTerminal() deaktiviert das Layout nicht.
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);
}
}
Gedanken?
Danke, Sam - Ich habe auch meinen Beitrag aktualisiert, um eine Vorgehensweise, die ich mit der App Module.php ausprobiert haben. Irgendwelche Gedanken darüber, warum setTerminal() keine Auswirkungen auf das ViewModel hat? –
Meine Vermutung ist, dass OnBootstrap kein ViewModel() vorhanden ist, eine Idee wäre, ein ViewModel mit Terminal (true) in den Controller zu injizieren und dies für die Ausgabe zu verwenden (mache ich irgendeinen Sinn?) – Sam