Lumen 5.6 Обработка ошибок (дважды генерирует исключение)

Это мой код для обработки любой ошибки:

Приложение \ Исключения \ Обработчик :: класс

public function render($request, Exception $e)
{

    $fe = \Symfony\Component\Debug\Exception\FlattenException::create($e);

    $statusCode = $fe->getStatusCode();
    $code       = $fe->getCode();
    $message    = $fe->getMessage();

    $errorObj = new \App\LOHDomain\Entities\Error($code, $message);

    return response()->json(['data' => null, 'error' => $errorObj], $statusCode);
}

когда я анализирую поддельный URL-адрес WSDL для SoapClient, он выдает два исключения

{"data":null,"error":{"code":"0","message":"SOAP-ERROR: Parsing WSDL: Couldn't load from 'asdsd' : failed to load external entity \"asdsd\"\n"}}
{"data":null,"error":{"code":"1","message":"SOAP-ERROR: Parsing WSDL: Couldn't load from 'asdsd' : failed to load external entity \"asdsd\"\n"}}

Таким образом, ответ json стал недействительным

При комментировании этой строки кода у поставщика возникает одно исключение:

Типаж Laravel \ Lumen \ Concerns \ RegistersExceptionHandlers

protected function registerErrorHandling()
{
        error_reporting(-1);

        set_error_handler(function ($level, $message, $file = '', $line = 0) {
            if (error_reporting() & $level) {
                throw new ErrorException($message, 0, $level, $file, $line);
            }
        });

        set_exception_handler(function ($e) {
            $this->handleUncaughtException($e);
        });

//        register_shutdown_function(function () {
//            $this->handleShutdown();
//        });
}

Так в чем проблема? а как это решить без правки в производителе?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
1 647
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решение состоит в том, чтобы очистить последнюю ошибку, потому что она сработала дважды.

  1. Исключение ошибки.
  2. Вторая - функция выключения.

Итак, решение:

Приложение \ Исключения \ Обработчик :: класс

public function render($request, Exception $e)
{

    $fe = \Symfony\Component\Debug\Exception\FlattenException::create($e);

    $statusCode = $fe->getStatusCode();
    $code       = $fe->getCode();
    $message    = $fe->getMessage();

    $errorObj = new \App\Domain\Entities\ResponseEntites\Error($code, $message);

    /**
     * This line of code resolves the issue
     * 
     * To reproduce the issue :
     * 1) Comment this following line of code
     * 2) Provide a fake WSDL URL to the SoapClient
     *
     * Recommendation: Remove this line if you aren't using the SoapClient
     */
    error_clear_last();

    return new \Illuminate\Http\JsonResponse(['data' => null, 'error' => $errorObj], $statusCode);
}

This isn't the best solution (but this is the best solution, that I tried in my case). If you have a better tested solution please share it.

ссылки:

  1. Неустранимые исключения обрабатываются дважды
  2. Изменение кода

Другие вопросы по теме