在Symfony 1.4 / Doctrine 1.2中基于数据库查询创建唯一的表单字段

时间:2011-09-30 01:49:54

标签: php forms symfony-1.4 dynamic doctrine-1.2

我有这个疯狂的项目在工作中发生,我们碰巧使用Symfony 1.4,所以我希望,理想情况下,尽可能地保持这个项目在框架的功能。不幸的是,尽管进行了大量的研究和搜索,我还没有找到一种方法来根据对数据库的查询生成sfWidgetForm元素。

我将通过解释项目的流程概述这是什么目的。

  1. 用户提交的表单中包含我们广告客户所需的数据。
  2. 根据此数据,可以调用数据库中的行。也许这个表格已经填满,其中,用户声称对园艺感兴趣。基于该相关性,这将产生与园艺相关的一行(或几行,但无论如何)。
  3. 这里有重要的部分。这种与园艺相关的内容本质上是对完全提交对于对园艺感兴趣的人提交所需的表单字段的概述。我们将获得表单元素类型,名称,标签,需求状态,启用状态等。基于这些元素的ID,我们可以看到它们中的任何一个是否依赖于另一个表。如果是这种情况,则使用javascript处理它们。那是另一个故事。
  4. 此时,我可以使用Symfony中的自定义构建组件创建表单(这样就可以了)。这些将输出正常工作的表单,但sfValidator小部件不支持它们,这是不幸的。我想做的是以某种方式告诉一些神奇的表单类来构建基于X条件,小部件和验证器的表单。
  5. 表单填写完毕并输出后,用户会填写剩下的字段,第二个表单会被验证,并且两个表单中的数据都会被发送给广告商。
  6. 我最感兴趣的是在Symfony中动态构建表单的数据。我可以轻松地使用组件构建,但我真的不想。特别是因为我计划很快退出,并且在框架内保留一些内容对我的队友来说是理想的。

    感谢您的任何想法!这是一个非常令人兴奋的项目,尽管从外面无聊 - 我以前从未动态生成表单,更不用说在Symfony中了。应该很酷。

2 个答案:

答案 0 :(得分:0)

您当然可以根据查询构建选择列表/单选按钮/复选框 - 我不确定这是否正是您想要做的?

请参阅http://www.symfony-project.org/api/1_4/sfWidgetFormDoctrineChoicequery参数 - 我经常使用它并且工作正常。

动态构建整个表单将很困难IMO - 我认为您需要至少定义一些规则,以便您可以显示/隐藏某些表单元素。

答案 1 :(得分:0)

可以在此处找到我如何解决此问题的功能示例:http://pastebin.com/NrJeADAk

效果很好。如果您的数据库正确且一致地描述了表单,您甚至可以通过表单提交描述来创建新表单。我已经为我的团队在工作中做了这个,并且在字段上进行了非常繁重的验证,到目前为止他们还没有设法创建导致问题的单个表单。我经常是SO用户,所以如果你偶然发现并希望了解更多信息,请随时给我留言。