我有一个使用注释序列化的对象。它工作正常。
如果我使用的是yaml配置,它也能正常工作。
我的问题是我想在不同的环境中使用它们。让我们说在控制器一中,我想使用注释配置,在控制器二中,我想使用yaml配置。我想这样做是因为我需要在这些输出中使用不同的字段名称。
这可能吗?我错过了什么吗?
答案 0 :(得分:1)
我不知道你怎么能做到这一点。
但是,如果您希望以不同方式公开属性,可以使用排除策略创建对象的不同视图。
示例:
/**
* @JMS\ExclusionPolicy("all")
* @ORM\Entity
*/
class FooBar
{
/**
* @ORM\Column(type="string")
* @JMS\Groups({"foo"})
*/
protected $name; // output 'name'
/**
* @ORM\Column(type="string")
* @JMS\SerializedName("foo_bar_name")
* @JMS\Accessor(getter="getName", setter="setName")
* @JMS\Groups({"bar"})
*/
protected $fooName; // output 'foo_bar_name'
// ...
public function setName($name)
{
$this->address = $name;
return $this;
}
public function getName()
{
return $this->name;
}
}
像这样,该属性可以用两个不同的名称序列化:
use JMS\Serializer\SerializationContext;
$serializer->serialize(new FooBar(), 'json', SerializationContext::create()->setGroups(array('foo')));
//will output $name as 'name'
$serializer->serialize(new FooBar(), 'json', SerializationContext::create()->setGroups(array('bar')));
//will output $fooName as 'foo_bar_name'
请注意,@JMS\SerializedName
不是必需的,您可以将其用于自定义名称。
请参阅文档的Exclusion strategies部分。
希望这可以替代你。