如何在symfony2中序列化复杂实体

时间:2015-07-07 15:21:20

标签: php symfony doctrine-orm

我想序列化具有多个与之关联的实体的车辆实体。

/**
 * 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的新手,我们将不胜感激。

1 个答案:

答案 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,但您可以轻松地输出到标准数组。

希望有所帮助。