2

Я использую FOSrestBundle в своем проекте Symfony2. У меня есть представление, созданное, как это:Как сериализовать объект, который не является персональной моделью с помощью JMS Serializer?

$view = $this 
    ->view(array(
     'form' => $this->formHandler->getForm()->createView(), 
     'translation' => $translation, 
    ), Response::HTTP_OK) 
    ->setTemplate('MyBundle:Translation.html.twig'); 

Где $translation является объектом моего собственного расслоения. Дело в том, что когда я вызываю $this->handleView($view), FosRestBundle использует сериализатор JMS для сериализации данных моего представления (формы и объекта перевода), но мой объект перевода имеет много атрибутов, бесполезных в моем случае, и ответ слишком велик для того, что Я пытаюсь это сделать.

Я решил использовать аннотацию группы только для получения полезных атрибутов.

Вот контекст с view группы:

$context = SerializationContext::create()->setGroups(array('view')); 
$view->setSerializationContext($context); 

И в моем переводе модели я могу установить ExclusionPolicy к all и добавить полезный приписывает view группы. Она работает, но с этой конфигурацией (группа view в контексте сериализации) моя форма объекта (который является Symfony\Component\Form\FormView) сериализуется {}

Как я могу использовать группу для моей модели перевода, но все еще сериализации мой объект FormView?

ответ

0

Если вы используете аннотации, JSI-сериализатор имеет политики исключения для каждого класса, который вы можете увидеть here.

Я бы предложил вместо этого по умолчанию исключить все и добавить аннотацию групп сериализаторов только к свойствам, которые вы хотите открыть. Вы можете добавить несколько групп, поэтому в этом случае ваш контекст сериализатора может иметь группы «form» и «translationBasic», а затем добавить группу «form» ко всем свойствам formView и «translationBasic» только к тем, которые вы хотите в классе Translation ,

+0

Но мне нужно переопределить класс FormView от поставщиков. Это не похоже на лучшую практику – iBadGamer

Смежные вопросы