Поле JMS Serializer Exclude Entity в контроллере Symfony2

У меня есть Entity, которую я хотел бы предоставить в API JSON, который я разрабатываю, проблема в том, что в этом конкретном контроллере есть только одно поле, которое я не хочу раскрывать. Есть ли способ исключить его из сериализации изнутри контроллера?

Я знаю, что могу аннотировать свою сущность, чтобы сериализатор просто проходил мимо этого поля, но что происходит во всех остальных случаях? Это действительно исключение.


person danielrvt    schedule 19.04.2014    source источник


Ответы (1)


Вы можете назначить каждое свойство группе, а затем определить эту группу в контексте при сериализации из контроллера.

Ваша сущность:

use JMS\Serializer\Annotations as Serializer;

class Comment
{
    /** @Serializer\Groups({"main", "secondary"}) */
    private $id;

    /** @Serializer\Groups({"main", "secondary"}) */
    private $title;

    /** @Serializer\Groups({"main", "secondary"}) */
    private $name;

    /** @Serializer\Groups({"main"}) */
    private $email;

    /** @Serializer\Groups({"main", "secondary"}) */
    private $message;
}

Затем в вашем контроллере

use JMS\Serializer\SerializationContext;

$serializer->serialize(
    new Comment(),
    'json',
    SerializationContext::create()->setGroups(array('secondary'))
);

В этом примере поле электронной почты исключено из сериализованных данных, но только для группы с именем secondary. Конечно, вы можете называть эти группы как угодно.

person Adam Elsodaney    schedule 19.04.2014
comment
Другими словами... нет. - person Taylor Hawkes; 17.05.2018