我使用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
}
}
}