如何仅通过一种方法通过 JMS/Serializer 公开 属性?
How to expose property by JMS/Serializer for only one method?
我在我的 Symfony 项目中使用 JMS 序列化器,我对此有疑问。我只想从实体公开 属性 以获取一种特定方法(一条路线),在其他情况下我不希望公开此 属性。如果有任何建议,我将不胜感激)
您可能可以使用属性上的 @Groups
注释来实现此目的,然后告诉序列化程序在您的控制器中序列化哪些组。
use JMS\Serializer\Annotation\Groups;
class BlogPost
{
/** @Groups({"list", "details"}) */
private $id;
/** @Groups({"list", "details"}) */
private $title;
/** @Groups({"list"}) */
private $nbComments;
/** @Groups({"details"}) */
private $comments;
private $createdAt;
}
然后:
use JMS\Serializer\SerializationContext;
$serializer->serialize(new BlogPost(), 'json', SerializationContext::create()->setGroups(array('list')));
//will output $id, $title and $nbComments.
$serializer->serialize(new BlogPost(), 'json', SerializationContext::create()->setGroups(array('Default', 'list')));
//will output $id, $title, $nbComments and $createdAt.
更多信息here。
我在我的 Symfony 项目中使用 JMS 序列化器,我对此有疑问。我只想从实体公开 属性 以获取一种特定方法(一条路线),在其他情况下我不希望公开此 属性。如果有任何建议,我将不胜感激)
您可能可以使用属性上的 @Groups
注释来实现此目的,然后告诉序列化程序在您的控制器中序列化哪些组。
use JMS\Serializer\Annotation\Groups;
class BlogPost
{
/** @Groups({"list", "details"}) */
private $id;
/** @Groups({"list", "details"}) */
private $title;
/** @Groups({"list"}) */
private $nbComments;
/** @Groups({"details"}) */
private $comments;
private $createdAt;
}
然后:
use JMS\Serializer\SerializationContext;
$serializer->serialize(new BlogPost(), 'json', SerializationContext::create()->setGroups(array('list')));
//will output $id, $title and $nbComments.
$serializer->serialize(new BlogPost(), 'json', SerializationContext::create()->setGroups(array('Default', 'list')));
//will output $id, $title, $nbComments and $createdAt.
更多信息here。