Я пытаюсь добавить свои пользовательские страницы. Я использую Kohana 3.3. В официальной документации указано, что я должен оверлеировать обработчик метода собственного класса Kohana_Exception
. Это довольно легко сделать, я сделал это. Теперь я ожидаю, что Кохана будет вызывать этот метод каждый раз, когда возникает исключение или ошибка. Но это не так. Я обнаружил 2 блока catch, где исключение попадает внутрь метода execute_request
класса Kohana_Request_Client_Internal
.
Первый улов
catch (HTTP_Exception $e) { // Get the response via the Exception $response = $e->get_response(); }
Второй улов
catch (Exception $e) { // Generate an appropriate Response object $response = Kohana_Exception::_handler($e); }
Как вы можете видеть, ни один из блоков catch не вызывает метод handler
.
Установка собственного обработчика исключений set_exception_handler
имеет никакого эффекта, поскольку применяется только к неперехваченным исключениям, а исключения, такие как 404
, выбрасываются и попадают.
Однако проблем с ошибками во время выполнения нет. Этот блок ловит их и явно вызывает метод overriden handler
.
if (Kohana::$errors AND $error = error_get_last() AND in_array($error['type'], Kohana::$shutdown_errors)) { // Clean the output buffer ob_get_level() AND ob_clean(); // Fake an exception for nice debugging Kohana_Exception::handler(new ErrorException($error['message'], $error['type'], 0, $error['file'], $error['line'])); // Shutdown now to avoid a "death loop" exit(1); }
Итак, мой вопрос: как мне настроить все, чтобы создать пользовательскую страницу ошибок для Exception и HTTP_Exception?
PS. Я могу отключить HTTP_Exception_404 и HTTP_Exception_500, чтобы отобразить мою страницу пользовательских ошибок, но я не думаю, что это лучший вариант, поскольку он может работать для этих двух, но переопределение всех возможных HTTP_Exceptions – не лучший способ.
PS2. Или я могу установить собственное пользовательское представление в bootstrap.php
:
Kohana_Exception::$error_view = 'custom_error.tpl';
Также не нравится это решение.