在我的API中,我有一个名为ApiException的自定义异常。我想将代码中的所有错误消息和异常传递给这个自定义异常,以处理日志记录和响应返回。我在想这样的事情:
class ApiException extends Exception
{
public $data;
public $status;
public function __construct($data, $status = 400)
{
$this->data = $data;
$this->status = $status;
}
public function render()
{
$output = $this->getOutput();
return response()->json($output, $this->status);
}
private function getOutput()
{
if (is_object($this->data) && $this->data instanceof Exception) {
return $this->getOutputException();
} else if (is_string($this->data)) {
return $this->getOutputString();
} else {
return ['message' => $this->defaultMessage()];
}
}
private function getOutputException()
{
// log exception
// send notification
return ['message' => $this->data->getMessage()];
}
private function getOutputString()
{
return ['message' => $this->data];
}
private function defaultMessage()
{
return __('message.defaultErrorMessage');
}
}
我可以用它来返回一个简单的字符串:
$resource = Resource::find($id);
if (!$resource)
throw new ApiException("resource not found!");
或者传递一个常规异常:
try {
Table::insert($data);
} catch (\Exception $exception) {
throw new ApiException($exception);
}
或其他例外:
$client = new GuzzleHttp\Client\Client();
try {
return $client->request('GET', "http://something");
} catch (GuzzleHttp\Exception\ClientException\ClientException $e) {
throw new ApiException($exception);
}
这就是我有问题的地方:is any kind of exception
。
private function getOutput()
{
if (is_object($this->data) && $this->data instanceof Exception) {
return $this->getOutputException();
}
}
如何检查我的对象是否是异常?我指的是任何类型的异常,而不仅仅是一般的异常,比如GuzzleHttp\Exception\ClientException\ClientException
。
1条答案
按热度按时间gfttwv5a1#
所有自定义异常扩展\Exception。试试这个:
或者你的代码