Symfony4 Uncaught BadRequestHttpException в Docker - PullRequest
0 голосов
/ 18 декабря 2018

Я создаю прокси-API для создания моста между мылом и отдыхом в symfony4.Чтобы правильно поймать мое исключение мыла, я создал Listner ниже.Локали мои мыльные исключения ловятся и выбрасываются как BadRequestHttpException.Когда я развертываю свой код в Docker-контейнере, у меня появляется следующая ошибка: Uncaught Symfony\\Component\\HttpKernel\\Exception\\BadRequestHttpException:

Есть мой список:

class TrinityListener implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return array(
            KernelEvents::EXCEPTION => array('onKernelException', -64),
        );
    }

    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        if (($e = $event->getException()) instanceof \SoapFault) {
            throw new BadRequestHttpException($e->getMessage());
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Следующий способ легче сделать то же самое:

public function onKernelException(GetResponseForExceptionEvent $event)
{
    if ($event->getException() instanceof \SoapFault) {
        $response = new Response();
        $response->setStatusCode(Response::HTTP_BAD_REQUEST);
        $response->setContent($event->getException()->getMessage());
        $event->setResponse($response);
    }
}
0 голосов
/ 18 декабря 2018

По моему мнению, ваша проблема не имеет ничего общего с Docker.

Вы создали TrinityListener , который прослушивает kernel.exception событие (a GetResponseForExceptionEvent объект на самом деле).Когда происходит это событие, выполняется метод onKernelException , и необычно генерировать исключение здесь, не перехватывая его должным образом.Ваше первоначальное исключение является экземпляром \ SoapFault , поэтому вы бросаете BadRequestHttpException , это нормально, но исключение не перехватывается.В этом проблема, ошибка очень явная, вы должны использовать try ... catch , чтобы исправить это.

Исключение из документации php:

При возникновении исключения код, следующий за оператором, не будет выполнен, и PHP попытается найти первый соответствующий блок catch.Если исключение не перехвачено, PHP-фатальная ошибка будет выдана с сообщением «Uncaught Exception ...», если обработчик не был определен с помощью set_exception_handler ().

Таким образом, вы можете исправить свою проблему следующим образом:

class TrinityListener implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return array(
            KernelEvents::EXCEPTION => array('onKernelException', -64),
        );
    }

    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        try {
            if (($e = $event->getException()) instanceof \SoapFault) {
                throw new BadRequestHttpException($e->getMessage());
            }
        } catch (BadRequestHttpException $e) {
            $response = new Response();
            $message = sprintf(
                'Error %s with code: %s',
                $exception->getMessage(),
                $exception->getCode()
            );
            $response->setContent($message);
            $response->setStatusCode($exception->getStatusCode());
            $event->setResponse($response);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...