Я реализую FOSUserBundle в моем проекте. Я хочу, чтобы базовое действие GET возвращало объект json сущности ContactList.
контроллер:
class ContactListController extends FOSRestController
{
use ViewContextTrait;
const DEFAULT_GROUPS = ['organization_list'];
/**
* @ParamConverter("contactList", class="SchemaBundle:ContactList")
* @param ContactList $contactList
* @return Response
*/
public function getAction(ContactList $contactList)
{
return $this->handleView($this->viewWithContext($contactList, Response::HTTP_OK));
}
Черта характера:
use FOS\RestBundle\Context\Context;
use FOS\RestBundle\View\View;
trait ViewContextTrait
{
public function viewWithContext($data, $statusCode = null, $groups = self::DEFAULT_GROUPS)
{
$context = new Context();
$context->setGroups($groups);
return View::create($data, $statusCode)->setContext($context);
}
}
мой config.yml
:
fos_rest:
routing_loader:
include_format: false
body_listener:
array_normalizer: fos_rest.normalizer.camel_keys
param_fetcher_listener: true
view:
view_response_listener: 'force'
format_listener:
rules:
- { path: '^/api', priorities: ['json'], fallback_format: json, prefer_extension: false }
Эта проблема: Когда я звоню по этому маршруту через почтальона (/api/contact-list/1
Я всегда получаю {}
для моего содержания в объекте ответа.
Это сбрасываемый ответ:
Чего мне не хватает, чтобы вернуть сериализованную сущность ContactList с контекстной группой в мой ответ?
Решение:
Прежде всего, мои аннотации не были включены. Я должен был добавить это к моему config.yml
:
framework:
serializer:
enabled: true
enable_annotations: true
Затем я забыл, что ранее включил сериализатор JMS в свой проект. Видимо ViewHandler для Rest Bundle имеет порядок по умолчанию для сервисов сериализатора что он использует. Мне пришлось включить это в мой config.yml
:
fos_rest:
service:
serializer: fos_rest.serializer.symfony
По умолчанию FOSRest использовал JMS Serializer, который не был настроен должным образом.
Других решений пока нет …