【问题标题】:Cannot throw objects that do not implement Throwable不能抛出未实现 Throwable 的对象
【发布时间】:2017-09-27 15:14:44
【问题描述】:

我正在使用 Laravel 5.5。有以下课程

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

方法名称:buildException

在 Laravel 5.4 中,我能够以如下方式返回 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 在上述方法中返回 JSON 时,它说

不能抛出未实现 Throwable 的对象

现在可以确定,我如何在 Laravel 5.5 中为上述方法返回 JSON

【问题讨论】:

    标签: laravel laravel-5 laravel-middleware laravel-5.5 laravel-response


    【解决方案1】:

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

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

    当然,如果您确实需要,您可以添加自己的 handle 方法实现,而不是抛出异常,您可以直接在其中返回响应,但可能抛出自定义异常并在 Handler 类中处理它是更好的选择。

    【讨论】:

    • 您能否提供更多详细信息,例如两个地方的 YourCustomException(ThrottleRequests 和 Handler.php)
    • 您可以创建扩展 Symfony\Component\HttpKernel\Exception\HttpException 的自定义类,在 buildException 方法中抛出此异常,而不是在 Handler 中使用 if ($e instanceof YourCustomException) {
    猜你喜欢
    • 2018-06-30
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多