【发布时间】:2016-09-27 07:03:28
【问题描述】:
让我们从背景开始。
我需要包含姓名、电子邮件、电话等基本信息的用户个人资料。为此,我有一个实体用户。
我还需要存储问卷中的答案。我正在考虑将它们作为文本字段中的 json 存储在数据库中。这些问题将来可能会改变,目前有大约 30 个问题,所以我不想将其存储为实体。所以目前在我的用户实体中我有这个:
/**
* @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 并且有一些神奇的方法请告诉我。我找不到太多关于这个的信息。
所以我在考虑数据转换器,或者只是在提交时创建一个数组,而不需要这个转换器。使用“mapped=>false”创建问卷中的所有字段,然后将这些提交的值设置为 $questionnaire 的关联数组。这“感觉”不错,但我不知道以后如何以“编辑”形式处理这个问题(来自我认为http://symfony.com/doc/current/reference/forms/types/form.html#data 的文档)。
问卷本身会有很多 ChoiceType 字段,一个带有“添加更多行”的 CollectionType 等等,它会有很多问题。所以会有点复杂。我想避免为每个问题创建实体作为属性(不确定这是否是一个正确的选择,但考虑到一切我认为它是最好的选择)。
这是我与 symfony 的第一次约会,所以任何帮助/提示都非常感谢。
【问题讨论】: