关于Laravel5中异常处理
项目中通常会遇到各式各样的异常处理,简单的分为参数验证类异常,数据库操作类异常,权限类异常,基础类异常。一个请求从开始到结束,可能会产生参数验证类异常,数据库操作类异常,权限类异常这几类,最后在控制器中进行基础异常的捕获。那么问题来了,如何在基础异常类中捕获到上述3类异常。
捕获代码如下
其中
中可能抛出参数验证类异常,数据库操作类异常,权限类异常。
Lavarel5手册中写到:所有的异常都由 App\Exceptions\Handler 类处理。这个类包含两个方法: report 和 render 。
report 方法用来记录异常或把异常传递到外部服务,例如: BugSnag 。默认情况下, report 方法只基本实现简单地传递异常到父类并于父类记录异常。然而,你可以依你所需自由地记录异常。如果你需要使用不同的方法来报告不同类型的异常,你可以使用 PHP 的 instanceof 比较运算符:
我的项目中此处代码如下:
仍无法正确抛出异常。
有人有相关的经验分享下吗?
捕获代码如下
try{
CreditService::getInstance()->actDailyLog($uid, $basic);
CreditService::getInstance()->createCreditLog($uid, $modelName, $modelId, $basic);
}catch (DevBaseException $e)
{
$this->delete();//
}
其中
CreditService::getInstance()->actDailyLog($uid, $basic);
CreditService::getInstance()->createCreditLog($uid, $modelName, $modelId,
中可能抛出参数验证类异常,数据库操作类异常,权限类异常。
Lavarel5手册中写到:所有的异常都由 App\Exceptions\Handler 类处理。这个类包含两个方法: report 和 render 。
report 方法用来记录异常或把异常传递到外部服务,例如: BugSnag 。默认情况下, report 方法只基本实现简单地传递异常到父类并于父类记录异常。然而,你可以依你所需自由地记录异常。如果你需要使用不同的方法来报告不同类型的异常,你可以使用 PHP 的 instanceof 比较运算符:
/**
* 报告或记录异常。
*
* 这是一个发送异常到 Sentry、Bugsnag 等服务的好地方。
*
* @param \Exception $e
* @return void
*/
public function report(Exception $e)
{
if ($e instanceof CustomException)
{
//
}
return parent::report($e);
}
我的项目中此处代码如下:
public function report(Exception $e)
{
if( config('app.debug') && $e instanceof DevBaseException)
{
//TODO not sure what to do with custom exception, temporarily using system error pages.
}
return parent::report($e);
}
仍无法正确抛出异常。
有人有相关的经验分享下吗?
1 个回复
Jachase
赞同来自: