不能抛出未实现 Throwable 的对象

Cannot throw objects that do not implement Throwable

我正在使用 Laravel 5.5。有以下class

vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php

方法名称:buildException

在 Laravel 5.4 中,我能够 return JSON 像下面这样的方法。

protected function buildException($key, $maxAttempts)
{
    $retryAfter = $this->getTimeUntilNextRetry($key);
    $headers = $this->getHeaders(
        $maxAttempts,
        $this->calculateRemainingAttempts($key, $maxAttempts, $retryAfter),
        $retryAfter
    );
    return response()->json('429 Too many requests');
}

当我在上面的方法中使用 Laravel 5.5 尝试 return JSON 时,它说

Cannot throw objects that do not implement Throwable

现在确定了,我如何在 Laravel 5.5 中 return JSON 进行上述方法

嗯,你现在不能再这样了。您需要 return 异常 class。但是你可以做的是 returning 一些自定义异常 class 然后在 app/Exceptions/Handler.php 在`render方法中你可以添加:

if ($e instanceof YourCustomException) {
   return response()->json('429 Too many requests');
}

当然,如果您真的需要,您可以添加自己的 handle 方法实现,而不是抛出异常,您可以直接在其中 return 响应,但可能会抛出自定义异常并在处理程序 class 是更好的选择。