Запрос-URI слишком длинный Контроллер Symfony

Я пытаюсь получить все ошибки из всех запросов, которые я делаю в моем проекте, и перенаправить эти ошибки на контроллер с именем «error», который будет обрабатывать эти ошибки так, как я хочу. Проблема выглядит так, как будто я перенаправляю всю информацию по URL-адресу, сгенерированному функцией через GET.

Я полагаю, что если эта информация будет отправлена ​​через POST, эта проблема исчезнет, ​​но я явно не использую какую-либо форму внутри контроллера. Итак, как я могу сказать функции перенаправления, что эта информация не должна идти с URL-адресом, а должна проходить через POST?

Возможно ли то, что я пытаюсь сделать?

Внутренние контроллеры:

    try {
        $results = $queries->aQuery();
    } catch (ErrorException $errorException) {
        return $this->redirect($errorException->redirectResponse);
    }

Внутри служебного запроса:

public function aQuery(){

    $query = "SELECT * FROM blabla ...";
    try {
        $stmt = $this->DB->->prepararQuery($query);
        $stmt->execute();
        $results = $stmt->fetchAll();
    } catch (DBALException $DBALException) {
        $errorException = new ErrorException($this->router->generate('error',
            [
                'errorQuery' => $query,
                'errorData' => "0 => '".$data1."', 1 ....",
                'errorOrigin' => 'a place',
                'errorResponseText' => $DBALException->getMessage()
            ]
        ));
        throw $errorException;
    }
}

ErrorException:

class ErrorException extends \Exception
{
    /**
     * @var \Symfony\Component\HttpFoundation\RedirectResponse
     */
    public $redirectResponse;

    /**
     * ErrorException constructor.
     * @param \Symfony\Component\HttpFoundation\RedirectResponse $redirectResponse
     */
    public function __construct(string $redirectResponse)
    {
        $this->redirectResponse = $redirectResponse;
    }

}

Насколько я знаю, перенаправление на POST невозможно. Используете ли вы атрибуты (errorQuery, errorData и т. д.) В URL-адресе как компоненты URL-адреса, такие как /{errorQuery}/{errorData}, или передаете их как QueryString (?errorQuery=..&errorData=...). Если вы передадите их как url-компоненты, можете ли вы удалить их из url, чтобы они отображались в строке запроса? Это действительно может помочь.

vstm 14.06.2018 17:27

blablabla.com/app_dev.php/es/error?errorQuery=%0A%20%20%20%2‌ 0% 20% 20% 20 ВЫБРАТЬ% 0A% 20% 20% 20% 2 ....... Я уже этим занимаюсь ... Все равно спасибо. Хорошая попытка.

Ricard Espinàs Llovet 14.06.2018 17:30

Вы можете сохранить эти значения в сеансе

ste 15.06.2018 08:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
3
290
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Если вы пытаетесь достичь централизованного способа обработки исключений, посмотрите https://symfony.com/doc/4.0/event_dispatcher.html#creating-an-event-listener и используйте событие kernel.exception

public function onKernelException(GetResponseForExceptionEvent $event)
{
    if (! $event->getException() instanceof ErrorException) {
        return;
    }

    // handle your custom ErrorException
    $response = new Response();
    $response->setContent($event->getException()->getMessage());

    // sends the modified response object to the event
    $event->setResponse($response);
}

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