JMS Serializer在Symfony2 Controller中排除实体字段

时间:2014-04-19 20:17:57

标签: json symfony jmsserializerbundle

我有一个我想要在我正在开发的json api中暴露的实体,问题是在这个特定的控制器中,只有一个我不想暴露的字段。有没有办法从控制器中将其从序列化中排除?

我知道我可以对我的实体进行注释,因此序列化程序只是通过该字段,但在所有其他情况下会发生什么?这确实是例外。

1 个答案:

答案 0 :(得分:4)

您可以将每个属性分配给一个组, 然后在序列化时在上下文中定义该组 来自控制器。

您的实体:

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的组。你当然可以随意打电话给这些小组。