如何通过Laravels异常处理程序传递异常?

时间:2016-08-04 07:42:29

标签: php laravel exception

我使用Laravel 5.2并编写了一些自定义服务类。这些类的方法不仅可以由控制器使用,还可以通过控制台命令使用。一些方法也使用相同服务的其他方法并迭代大型集合以完成其任务。很有可能某些方法无法实现其任务" (即要求返回一些替代结果),因为输入来自我无法控制的外部资源。

因为我来自Java背景,我以前有两种方法可以从方法返回一些东西 - 结果或异常。现在Laravel的问题在于异常处理程序捕获了异常,而我并不确定如何防止这种异常(对于某些类型的异常)。我不想在出现问题时返回null,因为它会使测试变得令人厌恶,有时甚至是不可能的,因为可能有很多原因导致方法无法返回正确的结果。

是否有一种简单的方法(只是)让服务异常通过默认处理程序,以便控制器或服务本身可以捕获它们?如果有方法可以,我会编写自己的异常类。原因是我希望将逻辑放在同一个地方,而不是分布在异常处理程序,服务和控制器上。我还需要不同的行为,具体取决于捕获某个异常的位置,原因和时间。

我想实现以下目标:

public class Service {
   public function doSomething() {
      // something went wrong
      throw new CustomException();
      // everything went fine
      return $result;
   }
}

public class Controller {
   private $service;

   public function action() {
      try {
         $service->doSomething();
         // all went fine, I'll go on and do what I want to
      } catch (CustomException $e) {
         // decide myself what to do and be able to do something different
         // in each place where a CustomException is thrown and catched
      }
   }
}

0 个答案:

没有答案