我有一個模型使用教義和JMSSerializer註釋對象的串行化陣列
/**
* @ORM\Table(name="polygon")
* @ORM\Entity(repositoryClass="MyBundle\Repository\PolygonRepository")
* @JMS\ExclusionPolicy("none")
*/
class Polygon {
/**
* @var string
*
* @ORM\Column(name="polygon", type="json_array")
* @JMS\Type("array<MyBundle\Model\Point>")
*/
private $points;
/***/
}
在DB它存儲象文本 '[{ 「×」:1, 「y」 的:1} ...]'
在控制器I有
/**
* Matches /polygon exactly
*
* @Route("/", name="polygon_list")
* @Method("GET")
*
* @Rest\Get("/")
*
*/
public function listAction()
{
return $this->container->get('doctrine.orm.entity_manager')
->getRepository('MyBundle:Polygon')
->findAll();
}
所以我得到 ReflectionProperty ::的getValue()預計參數1爲對象,數組給定
在...供應商/ JMS /元/ src目錄/元/ PropertyMetadata.php:51
如果只得到結果,也可能是通過使用虛擬財產
/**
* @JMS\Exclude
*/
private $points;
/**
* @JMS\VirtualProperty
* @JMS\Type("array<MyBundle\Model\Point>")
* @JMS\SerializedName("points")
* @JMS\Groups({"common"})
*
* @return array
*/
public function getMyPoints() {
return [new Point(), new Point()]
}
但我解決需要從POST收到此點作爲JSON,所以我迄今發現的唯一途徑是相似 https://github.com/sonata-project/sonata-doctrine-extensions
與在convertToPHPValue方法我addind唯一不同的附加強制轉換爲接收對象,而不是assoc命令陣列學說定製類型:
// pass my [{"x":1, "y":1} ...]
public function convertToPHPValue($value, AbstractPlatform $platform)
{
return array_map(function($a){ return (object)$a;}, json_decode($value));
}
是否有更乾淨的解決方案,而無需添加自定義的Doctrine序列化?
如果只有這個 ...供應商/ JMS /元/ src目錄/元/ PropertyMetadata.php:51 有
return $this->reflection->getValue((object)$obj);
但它
return $this->reflection->getValue($obj); // :(
如果教條領域是一個json_array爲什麼你不試圖轉儲爲字符串爲jmsserializer? – Matteo
你可以在這裏找到關於它的討論(https://github.com/schmittjoh/JMSSerializerBundle/issues/431) – Matteo