JMS序列化器排除Symfony2控制器中的实体字段

dan*_*rvt 1 json symfony jmsserializerbundle

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

我知道我可以注释我的实体,以便序列化器仅传递该字段,但在所有其他情况下会发生什么?这确实是个例外。

Ada*_*ney 5

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

您的实体:

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;
}
Run Code Online (Sandbox Code Playgroud)

然后在你的控制器中

use JMS\Serializer\SerializationContext;

$serializer->serialize(
    new Comment(),
    'json',
    SerializationContext::create()->setGroups(array('secondary'))
);
Run Code Online (Sandbox Code Playgroud)

在此示例中,电子邮件字段从序列化数据中排除,但仅限于名为 的组secondary。当然,您可以随意称呼这些组。