Fehlerfall
Bei ungültigen Requests seitens des Benutzers gilt es zu reagieren und eine entsprechende Fehler-Seite auszugeben.
Http-Status ändern
Möchtest du eine Fehlerseite ausgeben, kannst du über n2n\http\Response:setStatus()
den HTTP-Status ändern.
class ExampleController extends ControllerAdapter { // some methods public function notFound() { $this->getResponse()->setStatus(Response::STATUS_404_NOT_FOUND); $this->forward('view\notFound.html'); } }
StatusException
Im Fehlerfall ist es aber meistens sinnvoller und auch einfacher, eine n2n\http\StatusException
zu werfen. Der n2n-ExceptionHandler gibt in diesem Fall eine konfigurierbare Fehler-Seite mit dem entsprechenden Status-Code aus. Dieser Exception kannst du im Konstruktor einen beliebigen Status-Code übergeben: new StatusException(Response::STATUS_404_NOT_FOUND);
Für die häufigsten Fehlerfälle sind aber bereits Exceptions vorbereitet, denen kein Status-Code mehr übergeben werden muss:
- 404:
n2n\http\PageNotFoundException
- 403:
n2n\http\ForbiddenException
Folgendes Beispiel zeigt, wie du eine n2n\http\PageNotFoundException
anwenden könntest:
public function doDetail($id, ArticleDao $articleDao) { $article = $articleDao->getArticleById($id); if ($article === null) { throw new PageNotFoundException(); } $this->forward('view\detail.html', array('article' => $article)); }
notFound()
implementiert ist, eine StatusException
mit Status 404 (auch PageNotFoundException
), so wird anstelle des ExceptionHandlers notFound()
aufgerufen.Benutzerdefinierte Status-Seite
Wird vom n2n-ExceptionHandler eine HttpStatusException gefangen, gibt er standardmässig die View n2n/view/errorpages/status.html
aus. In der app.ini
unter der Gruppe [error]
kannst du aber für jeden HTTP-Status eine eigene View registrieren:
[error] error_view.default = "atusch\view\status.html" error_view.403 = "atusch\view\forbidden.html" error_view.404 = "atusch\view\notFound.html"
Ist für einen Status keine View definiert, so wird error_view.default
verwendet.
[error : live]
.