【问题标题】:Request-URI Too Long Symfony Controller请求 URI 太长 Symfony 控制器
【发布时间】:2018-06-14 15:19:29
【问题描述】:

我正在尝试从我在项目中执行的所有查询中获取所有错误,并将这些错误重定向到一个名为“error”的控制器,该控制器将按照我的意愿处理这些错误。当我通过 GET 重定向函数生成的 url 中的所有信息时,问题看起来像。

我想如果这个信息是通过 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;
    }
}

错误异常:

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 是不可能的。您是使用 url 中的属性(errorQueryerrorData 等...)作为 url 组件(如/{errorQuery}/{errorData})还是将它们作为 QueryString(?errorQuery=..&errorData=...)传递。如果将它们作为 url-components 传递,是否可以将它们从 url 中删除,以便在查询字符串中提供它们?这实际上可能会奏效。
  • blablabla.com/app_dev.php/es/error?errorQuery=%0A%20%20%20%20%20%20%20 SELECT%0A%20%20%20%2。 ......我已经这样做了......无论如何,谢谢你。这是一个很好的尝试。
  • 您可以将这些值存储在会话中

标签: symfony redirect post controller


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 2022-06-15
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    相关资源
    最近更新 更多