Symfony 如何使用JMSSerializerBundle创建良好的超媒体格式?
假设我想创建一个XML响应,该响应看起来如下所示:Symfony 如何使用JMSSerializerBundle创建良好的超媒体格式?,symfony,symfony-2.1,hateoas,jmsserializerbundle,hypermedia,Symfony,Symfony 2.1,Hateoas,Jmsserializerbundle,Hypermedia,假设我想创建一个XML响应,该响应看起来如下所示: <?xml version="1.0" encoding="utf‐8"?> <product xmlns="urn:com.acme.prods" xmlns:atom="http://www.w3.org/2005/xlink"> <id>1234</id> <name>Red Stapler</name> <price currency="EUR"&
<?xml version="1.0" encoding="utf‐8"?>
<product xmlns="urn:com.acme.prods" xmlns:atom="http://www.w3.org/2005/xlink">
<id>1234</id>
<name>Red Stapler</name>
<price currency="EUR">3.14</price>
<atom:link rel="payment" type="application/com.acme.shop+xml"
href="http://acme.com/products/1234/payment" />
</product>
<?php
// Product.php
namespace Acme\Bundle\ProductBundle\Entity;
use Acme\Bundle\ProductBundle\Money\Money;
class Product
{
/**
* @var integer
*/
private $id;
/**
* @var string
*/
private $name;
/**
* @var Money
*/
private $price;
[..]
}
现在,在中,我找到了@PreSerialize
和@PostSerialize
的注释,但它们似乎只能对正在序列化的对象调用方法。有人知道如何/是否可以实现这一点吗?或者我必须使用诸如Twig之类的模板引擎并手动创建XML响应吗?仅序列化程序包可能不足以满足这种情况,因为它只涉及序列化和反序列化,而不涉及更复杂的语义任务
我建议您考虑为您的API实现一种非常好的超媒体格式。非常有趣的问题。在仔细研究之后,我发现没有其他解决方案会用仅用于序列化的附加属性污染您的实体。。。捆绑包中似乎缺少的是使用另一个类处理特定对象的完整序列化的可能性。[您可以在此处选中1:为每个属性指定组][1][也可以在此处选中2:jms序列化程序捆绑包复杂生成值][2][1]:[2]:
<?php
// Money.php
namespace Acme\Bundle\ProductBundle\Money;
class Money
{
/**
* @var string
*/
private $currency;
/**
*
*/
private $amount;
}
<?xml version="1.0" encoding="utf‐8"?>
<product>
<id>1234</id>
<name>Red Stapler</name>
<price currency="EUR">3.14</price>
</product>
"links": [
{
"rel": "payment",
"type": "application/media-format+json",
"href": "[...]"
}
]