Иногда что-то идет не так, и происходит состояние ошибки. Например, вы ожидаете получить GET-переменную из HTTP-запроса, но она отсутствует либо имеет недопустимое значение. Чтобы выразить это состояние ошибки, вы обычно устанавливаете код ошибки 4xx в HTTP-ответе и возвращаетесь из действия контроллера.
Для примера, в приложении Blog, предположим, что пользователь вводит следующий URL в адресную строку браузера: http://localhost/posts/view?id=10000. Намерение такого запроса - отобразить пост блога с ID=10000. Если такой пост с таким ID не существует, мы устанавливаем код ошибки 404 (Page Not Found) в ответе:
// Действие "view" отображает пост блога с заданным ID
public function viewAction()
{
// Получить аргумент ID из GET
$id = (int)$this->params()->fromQuery('id', -1);
// Проверяем аргумент
if ($id<1) {
// Состояние ошибки - мы не можем отобразить пост
$this->getResponse()->setStatusCode(404);
return;
}
// Пытаемся найти пост в базе данных (SQL-запрос опущен для простоты).
$post = ...
if (!$post) {
// Состояние ошибки - пост не найден
$this->getResponse()->setStatusCode(404);
return;
}
// Нормальное выполнение
// ...
}
Когда ZF3 обнаруживает код ошибки 4xx в ответе, он перенаправляет пользователя на специальную страницу ошибки. Мы поговорим о страницах ошибок позже в данной главе.
Еще один способ выразить (критическую) ошибку - это выбросить исключение Exception
, например, так:
throw new \Exception("Post with ID=$id could not be found");
Когда ZF3 обнаруживает необработанное исключение, он показывает другую страницу ошибки с информацией об исключении.