Прежде всего, вам нужно убедиться, что вы загружаете свой модуль, включив его в раздел модулей вашего файла application / bootstrap.php следующим образом:
Kohana::modules(array(
'my'=>MODPATH.'my'
)
);
Тот факт, что вы упомянули, что происходит напрямуюна URL вашего контроллера обработчиков ошибок запускается ошибка 404. Я думаю, что ваш модуль не был загружен.
Я бы также предложил несколько дополнительных изменений.
http_response_exception.php не нужнорасширить Kohana_Exception, так как этот класс не исключение, а обработчик исключений.В этих же строках более подходящим именем класса может быть Exception_Handler, поскольку класс не представляет исключение, а обрабатывает их.Во-вторых, из-за того, как вы назвали этот файл, он должен быть расположен в modules / my / classes / http / response / exception.php.Кроме этого, код для этого класса выглядит хорошо.
Аналогично, из-за того, как вы назвали свой контроллер, он должен быть расположен и назван немного по-другому.Переместите его в modules / my / classes / controller / error / handler.php
Помните, что подчеркивание в имени класса означает новый каталог, согласно http://kohanaframework.org/3.2/guide/kohana/conventions
Наконец, я неНе думаю, что вам действительно нужно расширять класс Kohana_Core, а просто зарегистрировать свой собственный обработчик исключений.Вы можете зарегистрировать свой пользовательский обработчик исключений либо в файле начальной загрузки вашего приложения, либо в файле инициализации вашего модуля со следующим общим кодом:
set_exception_handler(array('Exception_Handler_Class', 'handle_method'));
Вот обработчик исключений клиента, который я использую, который очень похож на ваш:
<?php defined('SYSPATH') or die('No direct script access.');
class Exception_Handler {
public static function handle(Exception $e)
{
$exception_type = strtolower(get_class($e));
switch ($exception_type)
{
case 'http_exception_404':
$response = new Response;
$response->status(404);
$body = Request::factory('site/404')->execute()->body();
echo $response->body($body)->send_headers()->body();
return TRUE;
break;
default:
if (Kohana::$environment == Kohana::DEVELOPMENT)
{
return Kohana_Exception::handler($e);
}
else
{
Kohana::$log->add(Log::ERROR, Kohana_Exception::text($e));
$response = new Response;
$response->status(500);
$body = Request::factory('site/500')->execute()->body();
echo $response->body($body)->send_headers()->body();
return TRUE;
}
break;
}
}
}