Responses, Weiterleitungen, Fehler und JSON
Diese Seite richtet sich an Entwickler, die aus einem Controller Response, JsonResponse, redirect() oder
abort(404) zurückgeben. Eine Modul-View gibt ein Array zurück, und der Kernel macht daraus die Seite.
Weiterleitungen und Fehler laufen über das Modulobjekt; Nicht-HTML-Antworten werden direkt geschrieben und beenden den
Request.
Inhalt
- Das Ergebnis-Array
- Das Pagelayout
- Weiterleitungen
- Fehler
- JSON und andere Formate
- Header und Statuscodes
- Übersetzungstabelle
Das Ergebnis-Array
| Schlüssel | Bedeutung |
|---|---|
content | das HTML der View, meist $tpl->fetch( 'design:<path>.tpl' ) |
path | die Brotkrumennavigation: Einträge array( 'text' => ..., 'url' => ... ), der letzte mit 'url' => false |
title_path | der Pfad des Seitentitels, wenn er von path abweichen soll |
pagelayout | ein anderes Pagelayout-Template für diese View oder false für keines |
navigation_part, ui_context | wie die Administrations-Designs die Seite einrahmen |
Die vollständige Liste mit den Schlüsseln, die der Kernel und die Inhalts-Views ergänzen, finden Sie in der Referenz des Modulergebnisses.
Das Pagelayout
Die pagelayout.tpl des Siteaccess ist das Grundlayout. Es erhält $module_result und gibt
{$module_result.content} an der Stelle aus, an der das HTML der View steht. Eine View wählt ein anderes Layout, indem
sie dessen Template nennt (die Benutzer-Views setzen $Result['pagelayout'] = 'loginpagelayout.tpl'), oder keines
mit false (View-Ergebnisse, Templates und das Pagelayout).
Weiterleitungen
| Bedarf | Aufruf |
|---|---|
| Auf eine Adresse weiterleiten | return $Module->redirectTo( '/expdemo/list' ); |
| Auf eine andere View desselben Moduls weiterleiten | return $Module->redirectToView( 'list', array() ); |
| Auf eine Adresse aus dem Request weiterleiten | zuerst prüfen: eZRedirectManager::safeURI( $http->postVariable( 'RedirectURI' ) ) gibt das Ziel oder false zurück |
| „Zurück, woher Sie kamen“ | eZRedirectManager::returnURI( $module, '/expdemo/list', eZRedirectManager::formReturnURIs() ) |
Verwenden Sie nach jedem erfolgreichen Absenden eines Formulars das Muster POST, Weiterleitung, GET. Die Hilfsfunktionen für sichere Weiterleitungen folgen nur Adressen der eigenen Website (Sichere Weiterleitungen).
Fehler
return $Module->handleError( eZError::KERNEL_NOT_FOUND, 'kernel' ); // not found
return $Module->handleError( eZError::KERNEL_ACCESS_DENIED, 'kernel' ); // access denied; anonymous users get the login pageeZError definiert weitere Codes, darunter KERNEL_NOT_AVAILABLE, KERNEL_MOVED, KERNEL_MODULE_NOT_FOUND und
KERNEL_FORM_TOKEN_REFUSED. Die Fehlerseite wird vom Modul error mit dem Design des Siteaccess gerendert und lässt
sich daher wie jedes andere Template gestalten. Fehler, die Benutzer melden, finden Sie anhand ihrer Referenz in den
Logs (Einen Fehler anhand seiner Referenz finden).
Exceptions, die aus einer View entweichen, werden nicht wie in Symfony oder Laravel von einem konfigurierten
Exception-Listener in eine 500-Seite verwandelt: Behandeln Sie erwartete Fehlschläge in der View und geben Sie ein
Fehlerergebnis zurück; protokollieren Sie unerwartete mit eZDebug::writeError()
(Debugging, Logging und Fehler).
JSON und andere Formate
Für eine kleine JSON-Antwort aus Ihrer eigenen View senden Sie sie und beenden den Request ohne Pagelayout:
header( 'Content-Type: application/json; charset=utf-8' );
echo json_encode( array( 'ok' => true, 'data' => $data ) );
eZExecution::cleanExit();Unter Velocity beendet cleanExit() den Request mit einer Exception, die der Server behandelt; umschließen Sie den
Aufruf niemals mit catch ( Exception $e ), sonst wird die Seite an Ihre Ausgabe angehängt. Für APIs sollten Sie die
vorhandenen Schichten bevorzugen: ezjscore-Serverfunktionen für das JavaScript Ihrer Seiten, die REST-API für andere
Programme (REST- und JSON-APIs).
Header und Statuscodes
- Setzen Sie Header vor der Ausgabe mit der PHP-Funktion
header(); lesen Sie Request-Header übereZSysoder über$_SERVER, so wie der Kernel es vorbereitet hat. - Caching-Header für Seiten anonymer Besucher sind Einstellungen, kein Code:
site.ini [HTTPHeaderSettings](HTTP-Caching). - Request-Regeln können mit „nicht gefunden“, „verboten“, der Anmeldung oder einer Weiterleitung antworten, bevor Ihre View läuft (Middleware).
Übersetzungstabelle
| Framework | Exponential |
|---|---|
return $this->render( 'item.html.twig', [...] ) / return view( 'item', [...] ) | $tpl->setVariable(); $Result['content'] = $tpl->fetch( 'design:...' ); |
return $this->redirectToRoute( 'list' ) / return redirect()->route( 'list' ) | return $Module->redirectTo( '/expdemo/list' ); |
throw $this->createNotFoundException() / abort( 404 ) / raise Http404 | return $Module->handleError( eZError::KERNEL_NOT_FOUND, 'kernel' ); |
throw new AccessDeniedException() / abort( 403 ) | return $Module->handleError( eZError::KERNEL_ACCESS_DENIED, 'kernel' ); |
return new JsonResponse( $data ) / response()->json( $data ) | header(); echo json_encode(); eZExecution::cleanExit(); |
Verwandte Seiten
- Controller: Modul-Views
- Eigene Module und Views
- Formulare und CSRF-Schutz
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.