【问题标题】:Laravel exception handling without try/catch statement没有 try/catch 语句的 Laravel 异常处理
【发布时间】:2019-06-13 18:28:04
【问题描述】:

我想知道在没有 try/catch 语句的情况下抛出异常是一种好习惯。例如

/// 类驱动

class Driver{

 public function setAge($age)
   if(is_string($age)){
      throw new StringException('Age can not be string')
   }
   if($age>100){
      throw new TooLargeNumberException('Age is too large')
   }
}

///控制器

$d= new Driver()
$d->setAge(101) /// return TooLargeNumberException

或者

try{
$d= new Driver()
$d->setAge(101)
}
catch(StringException $e){
 return $e->getMessage()
}
catch(TooLargeNumberException $e){
return $e->getMessage()
}

请告诉我如何处理异常。哪种解决方案是正确的?是否一定要使用 always try/catch 语句?

【问题讨论】:

  • 您是否应该向用户抛出异常或如何最好地处理整个应用程序中的异常?
  • IMO,您处理整个过程都错了。只需通过 $driver->age = 50; 设置年龄(或者更好的是,存储生日代替)。通过验证修改年龄的请求来处理限制。
  • 使用表单验证laravel.com/docs/5.8/validation#validation-quickstart,这样您就可以优雅地向用户返回有关他们需要修复的错误。
  • 我想知道如何最好地处理跨应用程序的异常。请不要关心示例的内容。我的代码只是抛出异常的简单示例。我知道 laravel 有异常处理程序,它有助于创建错误视图。我学习 laravel,但我的问题对 PHP 来说是一般性的。是否必须使用 always try/catch 语句?像第一个例子一样只使用 throw 语句是不好的做法吗?我看不出这两个例子之间的区别。结果是一样的。这就是我的问题的原因。 try/catch 语句有什么好处?

标签: php laravel exception


【解决方案1】:

Laravel 有一个通用的异常处理程序,所有未捕获的异常都会转到:

App\Exceptions\Handler

这个类中有两种方法:reportrender,您可以使用它们来执行必要的操作。

请看:https://laravel.com/docs/5.8/errors

也就是说,你可以throwclass Driver里面的异常,而不需要在控制器中专门处理它们,你可以在你的Handler类中定义一个通用的异常处理策略。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    相关资源
    最近更新 更多