我想序列化具有多个与之关联的实体的车辆实体。
/**
* Vehicle
*
* @ORM\Table(name="vehicle")
* @ORM\Entity(repositoryClass="MyBundle\Entity\Repository\VehicleRepository")
* @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false)
*/
class Vehicle {
public function __construct(){
$this->car = new ArrayCollection();
$this->bus = new ArrayCollection();
$this->truc = new ArrayCollection();
}
//....
}
我在我的控制器中试过这个
$serializer = $this->container->get('serializer');
$reports = $serializer->serialize($vehicle, 'json');
print_r( $reports);exit;
return new Response($reports);
它给了我这个错误
警告:为foreach()提供的参数无效
由于我是symfony的新手,我们将不胜感激。
答案 0 :(得分:0)
在几周前编写数据备份/恢复脚本时,我必须完成同样的工作。
最后我使用了JMSSerializerBundle,这很棒。
您可以指定输出类型,以及非常重要的深度设置,以避免在处理关系时出现递归嵌套问题。
Usage非常简单,但您需要在实体中添加深度注释,然后告诉序列化程序按如下方式使用它们:
<强>实体强>
/**
* @MaxDepth(2)
* @var \Doctrine\Common\Collections\ArrayCollection
*/
private $tags;
<强>控制器强>
$this->serializer = $this->getContainer()->get( 'jms_serializer' );
$output = $this->serializer->serialize( $entities, 'json', SerializationContext::create()->enableMaxDepthChecks() )
您可以指定输出类型。在这种情况下,我在构建数据文件时使用了json,但您可以轻松地输出到标准数组。
希望有所帮助。