Disons que je veux créer un XML-réponse qui ressemble à quelque chose comme:
<?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>
Étant donné un modèle de domaine qui ressemble à quelque chose comme ce qui suit:
<?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;
[..]
}
Et l'argent de la classe, le long des lignes de:
<?php
// Money.php
namespace Acme\Bundle\ProductBundle\Money;
class Money
{
/**
* @var string
*/
private $currency;
/**
*
*/
private $amount;
}
Maintenant, à mes questions. Il serait assez simple de créer une réponse qui ressemble à la suivante
<?xml version="1.0" encoding="utf‐8"?>
<product>
<id>1234</id>
<name>Red Stapler</name>
<price currency="EUR">3.14</price>
</product>
soit en utilisant les annotations, XML ou YAML pour dire JMSSerializerBundle comment sérialiser le Produit-objet. Cependant, l' xmlns:atom
et <atom:link>
des entrées ne doit pas être spécifiée par l'entité, puisqu'il devrait n'en ont aucune idée de comment et où il est situé. Vous pouvez aussi imaginer plus de liens avec différents rel
-attributs, tels que l' edit
.
Une solution qui vient à l'esprit serait un service à l'écoute de la sérialisation des événements pour des objets spécifiques, et ajoute ces attributs et balises appropriées. Le service pourrait utiliser DI pour se procurer de l' Request
, Router
-service, etc pour générer ces liens dans un format approprié pour le format demandé. I. E en XML-réponse, on pourrait définir le type approprié d' application/media-format+xml
, alors que, dans une réponse json, il pourrait générer quelque chose comme
"links": [
{
"rel": "payment",
"type": "application/media-format+json",
"href": "[...]"
}
]
Maintenant, dans la documentation de JMSSerializerBundle, je trouve les annotations pour l' @PreSerialize
, et @PostSerialize
, mais ils semblent seulement être en mesure d'appeler des méthodes sur l'objet sérialisé.
Personne ne sait comment/si cela peut être réalisé? Ou dois-je utiliser un moteur de template comme des Rameaux et de créer manuellement le XML de la réponse?