2014-09-23 52 views
0

我想在用户有能力创建表单的应用程序中创建一个包。Symfony2动态表单构建器

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

如果它不存在。我应该如何继续?我总是只在像“Form \ Type \ UserType”这样的文件上创建表单。

在这种情况下,必须从数据库动态生成,对吧?只有我想念这个方法,任何人都可以提供一个关于如何实现这一点的提示吗?

更新

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

用户可以在后面的记录之后创建。

  • 刻度,刻度可以包含很多答案(是,否,也许,好,好......)
  • 一个问题类别
  • 一个问题,可以分配给许多类别和许多questionnairies
  • 问卷可以包含很多问题,用户可以在这里为问题指定一个比例。

桌秤

+----+--------+------------+----------+-----------+------------+ | 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 | +----+------+-------+------------+

多对多 '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 | +----+-----------------------------------------+------------+

多对多 'question_category'

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

表问卷

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

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

表questionnaire_question_scale

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

在最后的步骤i创建一个关系表的问卷分配给几个用户。

表questionnaire_user

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

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

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

这是我的终点,不幸的是我不知道更进一步。

我会的想法,建议和解决方案非常感激,如果你想建立它自己接近

+1

查看民意调查或调查包:https://packagist.org/search/?tags=survey https://packagist.org/packages/bait/poll-bundle或https://github.com/ Bodaclick/EnquiryBundle – Damien 2014-09-23 12:26:37

+1

您可以通过以下方式动态构建表单:http://symfony.com/doc/currentbook/form/dynamic_form_modification.html。但是你现在的套餐几乎肯定会更好。 – Cerad 2014-09-23 13:47:19

回答

0

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