我需要为我的app/module生成的异常创建自定义异常.
我可能有特定的例外,如下所述
特殊例外可能是通用例外的子类,例如"电子邮件无效"可能属于"输入无效"例外.
我应该能够在抛出时发送数据和异常消息.(如果可行,数据将在数组或对象中)
什么是最好的方式去做?
组织自定义例外的最佳方法是什么?
如何以这样的方式编写代码,使我们不必在每个地方捕获常见异常,但同时用户会收到有意义的错误.
在调用方法之后,我们应该只捕获该方法可以抛出的特定异常.
Mur*_*esh 11
我建议你转到Kohana 3.2,因为Kohana在新的稳定版本中处理异常的方式有所改变.假设您要使用v3.2,这就是管理自定义异常的方法:
首先,您需要修改bootstrap.php并确保Kohana :: init()调用中的'errors'为true.这将确保Koahana将处理您或系统抛出的所有未处理的异常.如果你检查\ classes\kohana\core.php,Kohana使用下面的php调用注册它的异常处理程序类Kohana_Exception
set_exception_handler(array('Kohana_Exception', 'handler'));
Run Code Online (Sandbox Code Playgroud)
默认的异常处理程序可以很好地处理所有类型的异常,并将消息写入日志文件夹并显示基本错误页面.如果您查看Kohana_Exception,它是Kohana_Kohana_Exception类的子类,这是编写逻辑的地方.
现在,要定制东西:
如果您只想显示一个自定义页面来显示错误,只需创建一个名为application/views/kohana/error.php的视图,并将自定义错误页面放在那里.它将覆盖在system/views/kohana/error.php中找到的系统默认错误视图文件.
如果您正在寻找更改记录错误的方式或根据特定类型的错误进行一些自定义处理,则需要通过在bootstrap.php末尾调用set_exception_handler()来覆盖Kohana_Exception类或注册您自己的派生异常处理程序.
:
class Kohana_Exception extends Kohana_Kohana_Exception
{
/**
* Overriden to show custom page for 404 errors
*/
public static function handler(Exception $e)
{
switch (get_class($e))
{
case 'HTTP_Exception_404':
$response = new Response;
$response->status(404);
$view = new View('error/report_404');
$view->message = $e->getMessage();
echo $response->body($view)->send_headers()->body();
if (is_object(Kohana::$log))
{
// Add this exception to the log
Kohana::$log->add(Log::ERROR, $e);
// Make sure the logs are written
Kohana::$log->write();
}
return TRUE;
break;
default:
return Kohana_Kohana_Exception::handler($e);
break;
}
}
/**
* Override if necessary. E.g. below include logged in user's info in the log
*/
public static function text(Exception $e)
{
$id = <get user id from session>;
return sprintf('[user: %s] %s [ %s ]: %s ~ %s [ %d ]',
$id, get_class($e), $e->getCode(), strip_tags($e->getMessage()), Debug::path($e->getFile()), $e->getLine());
}
}
Run Code Online (Sandbox Code Playgroud)
有用的外部链接和参考:
http://kohana.sebicas.com/index.php/guide/kohana/errors
http://kohanaframework.org/3.1/guide/kohana/tutorials/error-pages