如何从自定义异常消息中删除默认的Laravel异常消息

时间:2020-09-29 18:51:22

标签: php laravel

我在一个与一个处理所有数据的中央api项目进行对话的项目中拥有这个get Organization方法,

public function searchOrganisations()

{
    try {
        return $this->client->request(.....);
    } catch (Exception $ex) {
        
    }
}

然后在api项目中找到一个方法,如果达到某个时间范围标准,我将抛出一个自定义异常,如下所示:

public function searchOrganisations($searchRequest)
    {
        $experianCutOff = Carbon::createFromFormat('H:i:s', '06:00:00');
        $now = Carbon::now()->setTime(02, 0, 0);

        if (!$now->lt($experianCutOff)) {

            return $data
        } else {

            throw new ExperianServiceException();
        }
    }

我的自定义样本如下:

class ExperianServiceException extends Exception
{
    public function render() {
        return response()->json([
            'message' => 'The Experian Service is currently unavailable, please try again at 0600 GMT'
          ], 503);
    }
}

这可以按预期工作,并且我在列出的第一个方法中捕获了异常,我可以访问状态503并可以看到消息,但是异常的message属性始终以以下格式返回:

Server error: `POST http://docker.../search-organisations` resulted in a `503 Service Unavailable` response:
{"message":"The Experian Service is currently unavailable, please try again at 0600 GMT"}

似乎我提供的自定义消息已与标准Laravel Exception消息(我不想要)连接在一起。如何确保我的消息仅包含自定义异常中提供的内容?

2 个答案:

答案 0 :(得分:0)

也许:

 return Response::json(array(
                'code'      =>  404,
                'message'   =>  $message
            ), 404);   

答案 1 :(得分:0)

您可以使用Exception实现Illuminate\Contracts\Support\Responsable并定义toResponse方法来返回该响应。当您仅拥有render方法时,框架仍会潜在进行准备响应的操作。如果是Responsable,它将在其上调用toResponse并直接返回。

这将导致返回toResponse来自您的Exception的原始响应,而不会通过处理程序的任何其他部分进行准备。