Symfony2动态表单构建器

时间:2014-09-23 11:56:02

标签: symfony

我想在应用程序中创建一个包,用户可以在其中创建表单。

这些表格将是具有不同答案的问卷。你知道是否已存在类似的捆绑包吗?

如果不存在。我该怎么办?我总是只在像“Form \ Type \ UserType”这样的文件上创建表单。

在这种情况下,必须从数据库中动态生成,对吧?只有我想念这个方法,任何人都可以暗示如何实现这个目标吗?

更新

也许我认为复杂。我不确定表单服务是否能解决我的问题。知道我创建了一个数据库结构来描述我的初始情况。

用户可以在后端创建跟踪记录。

  • 一个量表,一个量表可以包含很多答案(是,不,可能,好,更好......)
  • 问题类别
  • 一个问题,可以分配给许多类别和许多问卷
  • 调查问卷可以包含许多问题,用户可以在此处为问题指定比例。

表格比例

+----+--------+------------+----------+-----------+------------+ | id | name | alignment | isActive | isDeleted | createDate | +----+--------+------------+----------+-----------+------------+ | 1 | Yes-No | horizontal | 1 | 1 | 2014-09-25 | +----+--------+------------+----------+-----------+------------+

表项目

+----+------+-------+------------+ | id | name | value | createDate | +----+------+-------+------------+ | 1 | Yes | 1 | 2014-09-25 | | 2 | No | 0 | 2014-09-25 | +----+------+-------+------------+

ManyToMany'scale_items'

+----------+----------+ | scale_id | items_id | +----------+----------+ | 1 | 1 | | 1 | 2 | +----------+----------+

问题类别的表类别

+----+---------+----------+-----------+------------+ | id | name | isActive | isDeleted | createDate | +----+---------+----------+-----------+------------+ | 1 | General | 1 | 0 | 2014-09-25 | +----+---------+----------+-----------+------------+

表格问题

+----+-----------------------------------------+------------+ | id | question | createDate | +----+-----------------------------------------+------------+ | 1 | Are you satisfied with the cleanliness? | 2014-09-25 | +----+-----------------------------------------+------------+

ManyToMany'quener_category'

+-------------+-------------+ | question_id | category_id | +-------------+-------------+ | 1 | 1 | +-------------+-------------+

表调查表

+----+-------------------+---------+----------+-----------+------------+ | id | name | version | isActive | isDeleted | createDate | +----+-------------------+---------+----------+-----------+------------+ | 1 | General Questions | 2.2 | 1 | 0 | 2014-09-25 | +----+-------------------+---------+----------+-----------+------------+

现在,数据库包含问卷调查表的比例和项目,问题和类别以及表格。现在我创建了一个很大的关系,将问题分配给具有指定比例的问卷。可以在不同的问题上为不同的尺度分配一个问题。

表Questionire_question_scale

+----+-------------+------------------+----------+------+--------+ | id | question_id | questionnaire_id | scale_id | page | hash | +----+-------------+------------------+----------+------+--------+ | 1 | 1 | 1 | 1 | 1 | X321Z1 | +----+-------------+------------------+----------+------+--------+

在最后一步中,我创建了一个关系表,为几个用户分配问卷。

表validationire_user

+---------+------------------+ | user_id | questionnaire_id | +---------+------------------+ | 21 | 1 | +---------+------------------+

现在,如果用户登录我将以表格形式呈现上述信息,这里开始我的问题:)

我认为我的解决方案效率低下,因为如果许多用户登录填写问卷,我必须每次将问卷(复杂结构)作为表格生成。

对我来说这是一个终点,不幸的是我不知道。

我非常感谢您的想法,提示和解决方案

1 个答案:

答案 0 :(得分:0)

如果你想自己构建它:我建议创建一个表单类型,将其声明为服务并在其中注入表单存储库(在下面进一步说明)。将其存储在数据库中:您可以创建两个实体(实际上为每个字段创建一个单独的实体似乎更好但是为了简单起见我使用两个实体):一个用于表单:YourBundle:Form,一个用于表单字段YourBundle:FormFieldForm实体只能包含idname以及与FormField的一对多关联。您存储在FormField中的数据将是:与Form的多对一关联 - 字段名称 - 字段类型 - 字段的选项。您可以将选项存储为Json或其他格式然后解码它。