Symfony 2 - 从表单数据创建和持久化json-Object。使用实体和FormTypes?

时间:2014-07-04 08:26:25

标签: json symfony

我正在使用Symfony 2框架开发报告工具。此报告工具使用许多参数,这些参数通过用户填写的html表单传递。然后使用参数创建报告。我们谈论的是40到50个参数。

我的想法: 我的想法是创建一个包含所有数据的json对象,并将其保存在一个数据库字段中,而不是为每个参数创建一个数据库列。我找到了一些可能的解决方案。也许你可以给我一些关于哪一个是有利的建议。

解决方案1:我可以创建一个实体和一个Formtype(就像Symfony 2中的常用方法)而不是将Entity-Object持久化到数据库中,我将序列化整个Object,然后将其保存在单个Database-Field中。 / p>

     $report = new Report();
     $form = $this->createForm(new ReportType(), $report);


    if ($form->isValid()) {

           $reportSerialized = serialize($reportParams);
           //...then persist $reportSerialized

然后在创建报告时,我会反序列化对象:

//...load report from database
$reportParams = unserialize($reportSerialized);

我尝试了这种方法,但是当存在嵌套对象时出现了反序列化的问题。

解决方案2:我既不使用Doctrine Entity也不使用Formtype Entity,而是直接从请求中获取数据作为数组,并从该数组创建一个json对象并保留它。

if ($form->isValid()) {

       $reportParams = $this->getRequest()->request->all();
       $reportParams = serialize($reportParams);
       //...then persist into Database

然后在创建报告时,我会反序列化对象:

$reportParams = unserialize($reportSerialized);

这两种解决方案中的哪一种是最佳做法,或者您有完全不同的解决方案?

1 个答案:

答案 0 :(得分:0)

如果您使用的是学说,请查看simple arrayarray类型。

根据PHP序列化映射和转换数组数据。如果需要存储数组数据的精确表示,则应考虑使用此类型,因为它使用序列化将数组的精确副本表示为数据库中的字符串。从数据库检索的值总是使用反序列化转换为PHP的数组类型,如果不存在数据,则返回null。

注释是:

/**
 * @var YourType[]
 * @ORM\Column(type="array")
 */