Php 如何选择要使用jmsserializer进行序列化/反序列化的驱动程序
我有一个使用注释序列化的对象。它很好用 如果我使用yaml配置,它也可以正常工作 我的问题是我想在不同的上下文中使用这两种语言。假设在控制器1中,我想使用注释配置,在控制器2中,我想使用yaml配置。我想这样做是因为我需要在这些输出中有不同的字段名Php 如何选择要使用jmsserializer进行序列化/反序列化的驱动程序,php,symfony,jmsserializerbundle,Php,Symfony,Jmsserializerbundle,我有一个使用注释序列化的对象。它很好用 如果我使用yaml配置,它也可以正常工作 我的问题是我想在不同的上下文中使用这两种语言。假设在控制器1中,我想使用注释配置,在控制器2中,我想使用yaml配置。我想这样做是因为我需要在这些输出中有不同的字段名 我试图用一个只使用注释的新实例覆盖序列化程序 我将jmsserializer服务配置更改为不使用特定的驱动程序。它起作用了,但我无法选择动态激活哪一个 我试图在容器中选择驱动程序,但无法使其工作 这可能吗?我错过了什么吗?我不知道你怎么能做到这一
- 我试图用一个只使用注释的新实例覆盖序列化程序
- 我将jmsserializer服务配置更改为不使用特定的驱动程序。它起作用了,但我无法选择动态激活哪一个
- 我试图在容器中选择驱动程序,但无法使其工作
这可能吗?我错过了什么吗?我不知道你怎么能做到这一点 但是,如果希望以不同方式公开属性,可以使用排除策略创建对象的不同视图 例如:
/**
* @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
不是必需的,您可以将其用于自定义名称
请参阅文档部分的更多信息
希望这可以成为您的一个替代方案。我想这样做,但它在我的用例中不起作用,因为我希望相同的属性以不同的名称公开。?这就是我给你看的
$fooName
返回序列化中$name
的值。它只是一个具有不同名称的假属性,使用相同的setter和getter。另外,$fooName
总是返回$name
的值。我会考虑的。ThanksIt比以两种不同的格式创建对象的两个不同视图更简洁,而且它代表更少的工作。