Symfony2异常响应。将404状态代码替换为200

问题描述 投票:5回答:3

我在symfony2中有一个404处理程序,它是一个EventListener。

[使用某些404,我进行了重定向,效果很好。对于浏览器,不会抛出404。

new RedirectResponse( $newURL );

该行基本上将404状态代码替换为200。

不过,在其他情况下,我想返回一些内容,而不是404消息,而是一些替换数据。像这样的东西:

$response = new Response( $returnJSONMessage );
$response->headers->set( 'Content-Type', 'application/json' );
$response->setStatusCode(200);

代码明智,这很好,但是不会阻止404返回。我猜是因为它位于其中:

$event->setResponse( $theResponse );

属于GetResponseForExceptionEvent类型。

我需要调用什么,才能使其以200而不是404的形式返回我的数据。以与RedirectResponse相同的方式。我尝试过:

$event->stopPropagation();

但是事实有点过头了。在这种情况下,似乎$ event-> setResponse中不是RedirectResponse的所有内容都标记为404。

有什么想法吗?

symfony exception-handling response
3个回答
14
投票

最后通过Symfony GitHub pull找到了我想要的东西;

$response->headers->set( 'X-Status-Code', 200 );

允许您覆盖异常状态代码。

$response->setStatusCode(200);

将不起作用。

在此请求:https://github.com/symfony/symfony/pull/5043

在这里拉:https://github.com/symfony/symfony/commit/118a5d2274dc7d6701c3e2a758b820cd49ebaf3b


2
投票

我通过以下代码解决了此问题。

use Symfony\Component\HttpKernel\Exception\HttpException;
...
$event->setException(new HttpException(200));

0
投票

就我而言,在尝试了多种解决方案之后,我使用了Event Subscriber from Symfony并声明了内核响应事件:

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    $events[KernelEvents::RESPONSE][] = ['onKernelResponse', 0];
    return $events;
  }

然后,在函数onKernelResponse中,在特定情况下,我将代码返回200而不是404:

  /**
   * @param FilterResponseEvent $event
   */
  public function onKernelResponse(FilterResponseEvent $event) {
    // Custom code to check which URL needs to return 200.
    $check_url_200 = $this->myOwnService->checkURL();
    if ($check_url_200) {
      $response = $event->getResponse();
      $response->getStatusCode() == Response::HTTP_NOT_FOUND ? $response->setStatusCode(Response::HTTP_OK) : $response->getStatusCode();
      $event->setResponse($response);
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.