Изменить ответ в функции завершения промежуточного программного обеспечения - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь изменить сообщение из 500 ошибок, если соблюдены определенные условия. У меня есть это промежуточное ПО в файле с именем ApiAfter.php:

<?php

namespace App\Http\Middleware;

use App\Helpers\Helper;
use App\Helpers\LogHelper;
use Carbon\Carbon;
use Closure;
use DateTime;
use Exception;
use Illuminate\Http\Response;

class ApiAfter
{

    public function handle($request, Closure $next) {
        return $next($request);
    }

    public function terminate($request, $response) {
        // move everything in handle function to this
        // logging the results of the request
        $response = $this->fixFiveHundred($request, $response);

        // I do some other stuff here

        return $response;
    }

    private function fixFiveHundred($request, $response) {
        if ($response->status() !== 500) return $response;

        try {
            if (!empty($response->original['message']) && $response->original['message'] === "Server Error") {
                if (!empty($response->exception)) {
                    $newMessage = $response->exception->getMessage();
                    return response($newMessage, 500); // this is the line of code I'm having trouble with
                }
            }
        } catch(Exception $e) {
            return $response;
        }

        return $response;
    }
}

В строке, которая говорит return response($newMessage, 500);, я пробовал много разных вещей, но на самом деле ничто не меняет ответ. Разве вы не можете изменить ответ в функции Terminate?

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Вам следует избегать обработки исключений в пользовательском промежуточном программном обеспечении.Laravel предоставляет простой класс, который допускает простую настройку.Взгляните на «метод визуализации» Обработка ошибок Laravel в официальных документах.

1 голос
/ 10 июля 2019

Can you not change a response in the Terminate function?

Краткий ответ: Нет.

Функция завершения в промежуточном программном обеспечении запускается после отправки ответа браузеру . Таким образом, вы не можете изменить ответ.

Как указал @Roberto Ferro, правильное место для обработки пользовательского ответа на исключения - это использование рендера в обработчике исключений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...