让我们从背景开始。
我需要一个用户档案,其中包含基本信息,如姓名、电子邮件、电话等。为此,我有一个名为“User”的实体。
我还需要存储问卷调查的答案。我考虑将它们存储在数据库中,作为文本字段中的json格式。这些问题可能会在未来发生变化,目前有大约30个问题,因此我不想将其存储为实体。因此,目前在我的User实体中,我有以下内容:
/**
* @var array
*
* @ORM\Column(name="questionnaire", type="json_array", nullable=true)
*/
private $questionnaire;
我知道Symfony会处理json_encode/json_decode的问题,这很好。但是现在,我在使用Symfony构建器创建表单时遇到了一些问题。起初我以为可以尝试像这样做:
$builder->add('questionnaire[source]');
这个不起作用。对于Symfony大师来说,我知道这很明显 ;o)
所以目前我看到的选择是:CollectionType或Data Transformers。
从我所看到的情况来看,CollectionType将无法使用,因为它只适用于具有一些JS“添加另一行”或类似内容的数字数组字段。http://symfony.com/doc/current/reference/forms/types/collection.html#adding-and-removing-items 但如果我对此错误,并且我应该使用CollectionType并且有某种神奇的方法,请告诉我。我找不到太多相关信息。
所以我在考虑Data Transformers或者仅在提交时创建一个数组而不使用这个Transformer。使用“mapped => false”创建所有Questionnaire中的字段,然后将这些提交的值设置为关联数组到$questionnaire中。这“感觉”还好,但我不确定如何在“编辑”表单中处理它(从文档中我认为可以使用此 http://symfony.com/doc/current/reference/forms/types/form.html#data)。
问卷本身将有许多ChoiceType字段,一个带有“添加更多行”的CollectionType等等,它将有很多问题。所以它会有点复杂。我想避免为每个问题创建实体作为属性(不确定是否是正确的选择,但考虑到所有情况,我认为这是最好的选择)。这是我与Symfony的第一次约会,所以任何帮助/提示都会感激。