异常处理

相关类

ThrowOn , ExceptionManager

相关配置

‘error_404’ => null, //‘_sys/error-404’,

  1. 404 视图/闭包

‘error_500’ => null, //‘_sys/error-500’,

  1. 异常视图/闭包

‘error_debug’ => null, //‘_sys/error-debug’,

  1. 调试视图/闭包

以下是高级的选项。

‘skip_exception_check’=>false,

  1. 运行阶段,跳过异常检查抛出给上层

‘handle_all_dev_error’ => true,

  1. 接管调试错误

‘handle_all_exception’ => true,

  1. 接管所有异常管理

基本的异常处理

基本的异常处理

默认异常, 会调用 error_500 选项里设置的 view ,如果值是回调闭包,则调用那个回调。

控制器处理异常

C::assignExceptionHandler($classes, $callback = null); C::assignExceptionHandler([$class=>$callback]);

  1. 为特定 异常类设置回调, 发生异常的时候 $callback($exception);这个方法是 assign 方法,两种调用形式,另一种调用形势是

C::setMultiExceptionHandler(array $classes, $callback)

  1. 为了方便多个异常统一调用, 添加了这种错误回调的形势, $classes 为异常类名列表

C::setDefaultExceptionHandler setDefaultExceptionHandler($callback)

  1. 没在异常类列表里的默认调用 $callback($exception);

C::ThrowOn($flag,$message,$code); C::ThrowOn($flag,$message,$exception_class); C::ThrowOn($flag,$message,$code,$exception_class);

  1. 如果 $flag 成立,则抛出异常。ThrowOn 使用于所有助手类,以及 use DuckPhp\Core\ThrowOn 的类。如果该类是 异常类,则默认的 $exception_class 该类,否则为 \Exception

异常处理的一般守则

Model 不抛出异常。Service 抛出自己错误的时候,来个同名 exception 类。如 SessionService => SessionServiceException 。由调用者自行解决异常问题。

建议这些 Exception 类继承 BaseExeption 类,并实现一个 display($ex) 方法,以便于出错的时候显示 同时, DuckPhp 并没有自动记录异常。所以要自行 Log。

异常的高级处理

‘error_debug’ => null, 选项,用于

‘handle_all_dev_error’ => true, ‘handle_all_exception’ => true, 选项用于接管系统错误。 该选项用于 DuckPhp\DuckPhp 类,而不是 MY\Base\App 这样后者接管类

‘skip_exception_check’=>false, 开启时候 运行阶段,跳过异常检查抛出给上层。如果你不打算自己管理错误的话。 技巧,管理错误的时候,把这个选项 打开 throw $ex ;则由上层管理错误

如果没调用 C::setDefaultExceptionHandler 则由 APP::OnDefaultException 处理 exception 。你可以重写 APP::_OnDefaultException 来实现自己的异常管理,如加日志等等。