FOSRestBundle конфигурация сообщений об исключениях в среде prod

Я борюсь с проблемой, связанной с FOSRestBundle (версия 0.13. *)

У меня есть некоторые REST API, который выдает некоторые исключения, я думаю, ничего необычного. Но, несмотря на конкретную конфигурацию, которую я сделал, чтобы сообщения об исключениях могли быть отформатированы в ответе даже в производственной среде (следуя документации, которую я нашел здесь: https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Resources/doc/4-exception-controller-support.md), ответ JSON остается отчаянно пустым …

Пример ниже:

http://host/app_dev.php/api/postcode/search?postcode=

результаты в:

HTTP 400: {"status":"error","status_code":400,"status_text":"Bad Request","current_content":"","message":"You must provide a postcode"}

НО

http://host/api/postcode/search?postcode=

результаты в:

HTTP 400: []

Мой контроллер API выглядит так:

/**
* Search post codes
*
* @param Request   $request   Request
* @param Promotion $promotion Promotion
*
* @Rest\View()
*
* @throws BadRequestHttpException
* @return array
*/
public function searchAction(Request $request, Promotion $promotion)
{
// Get post code
$postCode = $request->query->get('postcode');
if (!$postCode) {
throw new BadRequestHttpException('You must provide a postcode');
}

// SOME LOGIC HERE TO GET DATA

return $data;
}

и конфигурация fos_rest выглядит так:

fos_rest:
routing_loader:
default_format: json
view:
mime_types:
json: ['application/json; charset=UTF-8']
formats:
json: true
view_response_listener: force
format_listener: false
access_denied_listener:
json: true
body_listener: true
exception:
messages:
Symfony\Component\HttpKernel\Exception\BadRequestHttpException: true

Как я понял, в конфигурационном массиве fos_rest.exception.messages должен быть указан список исключений, для которых я хочу сериализацию сообщения об ошибке даже в производственной среде. Как видно из кода контроллера, этот ответ содержит переведенное сообщение об ошибке, которое будет отображаться клиенту. Почему эта конфигурация игнорируется?
Я могу с уверенностью сказать, что конфигурация правильно загружена даже в среде prod, потому что, если я неверно введу имя класса в conf, произойдет сбой с исключением «Не удалось загрузить класс».

Что мне не хватает? Заранее спасибо за любой намек, который вы могли бы дать мне …

4

Решение

У меня была похожая проблема, твой вопрос помог мне решить ее на самом деле!
Я знаю, что уже поздно, но я обнаружил, что очистка prod кеш помог исправить это для меня.

Также это мои настройки:

fos_rest:
param_fetcher_listener: true
body_listener:
array_normalizer: fos_rest.normalizer.camel_keys
format_listener: true
view:
view_response_listener: 'force'
formats:
json: true
templating_formats:
html: true
force_redirects:
html: true
failed_validation: HTTP_BAD_REQUEST
default_engine: twig
routing_loader:
default_format: json
serializer:
serialize_null: true
access_denied_listener:
json: true
exception:
enabled: true
messages:
Symfony\Component\HttpKernel\Exception\BadRequestHttpException: true

Мне также интересно, нужно ли вам всегда явно добавлять исключения в codes а также messages разделы конфигурации, если вы не используете HttpException:

throw new HttpException(400, "New comment is not valid.");
6

Другие решения

Я не пробовал это, но похоже, что вы забыли эту строку:

 exception:
codes:
'Symfony\Component\Routing\Exception\ResourceNotFoundException': 404

попробуй.

и вы упомянули это:

twig:
...
...
exception_controller: 'FOS\RestBundle\Controller\ExceptionController::showAction'
0

По вопросам рекламы [email protected]