Symfony переопределяет код состояния в ответе - PullRequest
0 голосов
/ 03 мая 2018

Я работаю над веб-приложением Symfony 2.8, в этом приложении мне нужно вернуть 403 json-ответ на запрос ajax, даже если пользователь не вошел в систему, а перенаправил. Чтобы решить эту проблему, я использовал Listener:

class AccessDeniedListener {

public function onAccessDeniedException(GetResponseForExceptionEvent $event) {
    if ($event->getException()->getCode() === 403
            && $event->getRequest()->isXmlHttpRequest()) {
        $event->setResponse(new JsonResponse(['foo' => 'bar']), 403);
        $event->stopPropagation();
    }
  }
}

и установите приоритет выше значения по умолчанию ExceptionListener, он работает нормально, но когда я делаю AJAX-запрос, я получаю ожидаемое содержимое, но не statusCode (вместо 500)

$.get('http://localhost/web/app_dev.php/test').fail(function( jqXHR, textStatus ) {
  console.log(jqXHR.status); //returns 500
});

Итак, мой вопрос ... Я делаю что-то не так или я что-то упустил ... спасибо.

1 Ответ

0 голосов
/ 03 мая 2018

После долгой отладки я обнаружил ошибку. Я упал глупо ..

Мой код был

$event->setResponse(new JsonResponse(['foo' => 'bar']), 403);

вместо

$event->setResponse(new JsonResponse(['foo' => 'bar'], 403));

Также, установив ответ на событие, он останавливает распространение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...