Если использовать один тип обработчиков (не считая шаблонов), можно добавить и простую поддержку исключений. Например, заключить подключение обработчика в блок try, чтобы не писать каждый раз try-catch внутри обработчика.
Также следует явно определить класс HTTP-исключений с уточнением семантики аргументов конструктора $message и $code, чтобы не использовать для генерации таких исключений базовый класс Exception. Уточнять тип исключения можно и в одном блоке catch:
Если расширять блок try сверх упомянутого в предыдущем комментарии охвата, не нужно забывать, что при ошибках запроса к объекту вызов функции error до вызова контроллеров позволял использовать контроллеры для обработки таких ошибок.
Если будем избавляться от возможности вызова контроллера при ошибках запроса к объекту, нужно об этом предупредить, т.к. данная возможность иногда используется.
Можно добавить функцию abort:
function abort($code = 500, $message = '')
{
throw new HttpException($message, $code);
}
А также добавить второй необязательный аргумент $message в функцию error.
добавлена функция abort для генерации HTTP-исключений (непосредственно в коде контроллера можно по-прежнему использовать функцию error и return, а исключения генерировать на более глубоких уровнях вложенности вызовов);
добавлен второй необязательный параметр в функцию error для передачи текстового сообщения, которое сохраняется в переменной $page['content'].
Материалы блога будут постепенно обновляться с учетом перечисленных изменений.
Рассылку запущу сегодня или в один из ближайших дней.
Для страницы ошибки будет возвращено поле name, определяемое непосредственно в функции error, со значениями наподобие "404" или "503". Хранение таких значений в поле id себя не оправдало. Это поле сохранится, но будет содержать пустую строку, как это было в версиях до 3.06 включительно.
Напоминаю, что функцию error разрешено изменять. Т.е. все сказанное относится к поведению программного каркаса по умолчанию. Также не следует воспринимать возврат поля name, как принуждение к его использованию вместо, например, поля title. Можно продолжать работать по предложенной ранее схеме, используя команду
$page['title'] = $page['name'];
вместо команды
$page['title'] = $page['id'];
В связи с планируемым переносом встроенных функций каркаса в подключаемые файлы, а также расширением состава встроенных функций рекомендую использовать require_once для подключения в контроллерах файлов наподобие query.php, find.php, collection.php и т.п. Также можно оперативно вносить соответствующие изменения по мере появления среди подключаемых файлов каркаса определенных файлов.
Объединила код функции db_open, используемый по умолчанию, и расширенный код из комментария к статье, чтобы перенести функцию в подключаемый файл:
Если использовать один тип обработчиков (не считая шаблонов), можно добавить и простую поддержку исключений. Например, заключить подключение обработчика в блок try, чтобы не писать каждый раз try-catch внутри обработчика.
Также следует явно определить класс HTTP-исключений с уточнением семантики аргументов конструктора $message и $code, чтобы не использовать для генерации таких исключений базовый класс Exception. Уточнять тип исключения можно и в одном блоке catch:
Если расширять блок try сверх упомянутого в предыдущем комментарии охвата, не нужно забывать, что при ошибках запроса к объекту вызов функции error до вызова контроллеров позволял использовать контроллеры для обработки таких ошибок.
Если будем избавляться от возможности вызова контроллера при ошибках запроса к объекту, нужно об этом предупредить, т.к. данная возможность иногда используется.
Можно добавить функцию abort:
А также добавить второй необязательный аргумент $message в функцию error.
Образец контроллера, реализующего обратную совместимость:
Вышла версия 3.14 или Pi (π).
Список изменений:
Материалы блога будут постепенно обновляться с учетом перечисленных изменений.
Рассылку запущу сегодня или в один из ближайших дней.
Для страницы ошибки будет возвращено поле name, определяемое непосредственно в функции error, со значениями наподобие "404" или "503". Хранение таких значений в поле id себя не оправдало. Это поле сохранится, но будет содержать пустую строку, как это было в версиях до 3.06 включительно.
Напоминаю, что функцию error разрешено изменять. Т.е. все сказанное относится к поведению программного каркаса по умолчанию. Также не следует воспринимать возврат поля name, как принуждение к его использованию вместо, например, поля title. Можно продолжать работать по предложенной ранее схеме, используя команду
вместо команды
В связи с планируемым переносом встроенных функций каркаса в подключаемые файлы, а также расширением состава встроенных функций рекомендую использовать require_once для подключения в контроллерах файлов наподобие query.php, find.php, collection.php и т.п. Также можно оперативно вносить соответствующие изменения по мере появления среди подключаемых файлов каркаса определенных файлов.
Объединила код функции db_open, используемый по умолчанию, и расширенный код из комментария к статье, чтобы перенести функцию в подключаемый файл:
При наличии конфигурационного параметра $charset с отличным от NULL значением будет выполняться установка кодировки.