我对saber xml有一点疑问。
我不想为每个想要序列化的PHP类开发硬编码的自定义编写器,所以我使用mapValueObject来告诉SabreXML该怎么做。 不幸的是,我的重复元素没有分组。
我有一个PHP模型,看起来像这样(简化):
class ProductItem包含“Product”类的对象和一个数组,其中包含多个用于多语言的ProductsDescriptions。
class ProductItem extends Model {
/**
* @var Product
*/
var $Product;
/**
* @var ProductsDescription[]
*/
var $descriptions;
}
class Model包含如何序列化扩展类的信息。
abstract Model {
public function Serialize() {
$service = new \Sabre\Xml\Service();
$service->mapValueObject('{}ProductItem', ProductItem::class);
$service->mapValueObject('{}Product', Product::class);
$service->mapValueObject('{}ProductsDescription', ProductsDescription::class);
$xml = $service->writeValueObject($this);
return $xml;
}
}
返回的XML如下所示:
<?xml version="1.0"?>
<ProductItem>
<Product>
<Id>1234</Id>
<Stock>100</Stock>
</Product>
<descriptions>
<Language_code>deu</Language_code>
<Products_name>TestDEU</Products_name>
</descriptions>
<descriptions>
<Language_code>eng</Language_code>
<Products_name>TestENG</Products_name>
</descriptions>
</ProductItem>
但我希望它看起来像这样:
<?xml version="1.0"?>
<ProductItem>
<Product>
<Id>1234</Id>
<Stock>100</Stock>
</Product>
<descriptions>
<ProductsDescription>
<Language_code>deu</Language_code>
<Products_name>TestDEU</Products_name>
</ProductsDescription>
<ProductsDescription>
<Products<Language_code>eng</Language_code>
<Products_name>TestENG</Products_name>
</ProductsDesription>
</descriptions>
</ProductItem>
有没有办法告诉SabreXML使用mapValueObjects对某个类的重复元素进行分组,还是我必须为我的类ProductItem编写一个自定义序列化器,它将收集所有子节点,将它们设置为一个数组并使用
序列化它们Sabre\Xml\Serializer\repeatingElements($writer, $collection, 'childname');
功能