Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Журнал и ошибки

Когда что-то идёт не так, нужно узнать, что именно произошло. Журнал — файлы, в которые приложение записывает события и ошибки. Исключение — способ остановить действие и показать посетителю страницу ошибки. CakePHP даёт готовые средства для того и другого.

Где лежит журнал

Файлы журнала находятся в папке logs в корне проекта: ошибки попадают в logs/error.log, остальные записи — в logs/debug.log. Настроено это в разделе Log файла config/app.php.

Запись в журнал

// src/Controller/ArticlesController.php
use Cake\Log\Log;
 
public function view(int $id): void
{
    Log::info("Открыта статья $id");
 
    $this->set('article', $this->Articles->get($id));
}

Откройте /articles/view/1 и загляните в logs/debug.log — в конце появится строка с датой, уровнем info и текстом сообщения.

Уровни

МетодКогда использоватьФайл
Log::debug()Подробности для разработчикаdebug.log
Log::info()Обычное событиеdebug.log
Log::warning()Что-то подозрительноеerror.log
Log::error()Ошибка, требующая вниманияerror.log

Необработанные исключения фреймворк записывает в error.log сам — вместе с адресом запроса и цепочкой вызовов.

Функция debug

debug($article);

debug() печатает переменную прямо на странице вместе с файлом и строкой вызова. Она работает только в режиме разработки. Функция dd() делает то же и останавливает выполнение.

Страница ошибки из действия

use Cake\Http\Exception\NotFoundException;
 
public function view(int $id): void
{
    $article = $this->Articles->get($id);
 
    if (!$article->published) {
        throw new NotFoundException('Статья не найдена.');
    }
 
    $this->set(compact('article'));
}

throw прерывает действие, и посетитель получает страницу с кодом 404. Неопубликованная статья выглядит для него так же, как несуществующая.

Готовые исключения

КлассКод
BadRequestException400
ForbiddenException403
NotFoundException404
MethodNotAllowedException405
InternalErrorException500

Все они находятся в пространстве имён Cake\Http\Exception.

Как выглядит ошибка

В режиме разработки (debug равен true) страница ошибки показывает текст исключения, файл, строку и цепочку вызовов. На рабочем сервере (debug равен false) посетитель видит короткую страницу без подробностей.

Эти короткие страницы — обычные шаблоны, их можно изменить:

ШаблонДля каких ошибок
templates/Error/error400.php404 и другие ошибки запроса
templates/Error/error500.phpОшибки сервера

Рамку для них задаёт макет templates/layout/error.php.

Частая ошибка

На рабочем сервере страница сообщает только «An Internal Error Has Occurred», и её начинают чинить наугад или включают debug прямо на сервере. Не нужно ни того, ни другого: полный текст ошибки с файлом и строкой уже записан в logs/error.log. Первым делом открывайте журнал.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.