Я пытаюсь получить все ошибки из всех запросов, которые я делаю в моем проекте, и перенаправить эти ошибки на контроллер с именем «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;
}
}
blablabla.com/app_dev.php/es/error?errorQuery=%0A%20%20%20%2 0% 20% 20% 20 ВЫБРАТЬ% 0A% 20% 20% 20% 2 ....... Я уже этим занимаюсь ... Все равно спасибо. Хорошая попытка.
Вы можете сохранить эти значения в сеансе




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