A free and open-source book on ZF3 for beginners


4.8. Выражаем ошибочное состояние

Иногда что-то идет не так, и происходит состояние ошибки. Например, вы ожидаете получить 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 обнаруживает необработанное исключение, он показывает другую страницу ошибки с информацией об исключении.


Top