一段时间以来,我一直在努力解决动态表单的问题,该问题取决于以前的输入。这是我的第一个Symfony项目,所以我还在摸索如何把所有东西结合起来。
我所拥有的是用于选择时间段的表单类型。有预设周期(如1分钟,5分钟,30分钟,1小时等)和自定义文本框输入一定的秒数。这个表单可以嵌入到其他表单中,因此(恐怕)没有一个可以访问的标准ID。我希望自定义时间文本框只有在从预设时间列表中选择"自定义时间"(空值)时才可见。
或者,预设值可以只在秒内写入一个值到自定义值(并且需要在修改自定义文本框时将预设框更改为custom)。这也是可以接受的。
如果表单构建器没有被使用,这将是琐碎的JavaScript,但不是黑客的东西在一起,我宁愿做它正确的可重用的代码,以便我知道未来。按照我的想法,如果有一种方法可以在表单类型本身中指定一个自定义表单呈现模板,并且只应用于该表单,那将是非常棒的。
祈祷有一个好的解决方案!
编辑:另外,我正在使用Twig渲染我所有的视图。
一些研究的结果表明,做到这一点的最佳方法是为小部件添加字段覆盖:
/src/佩恩表的编制者/DataBundle/资源/视图/形式/fields.html.twig:
{% block periodChoose_widget %}
<script type="text/javascript" src="{{ asset('bundles/databundle/js/periodChoose.js') }}"></script>
{{ block('form_widget') }}
{% block %}
然后将以下内容添加到每个app/bundle配置文件中:
/app/config/config.yml:
imports:
data_bundle:
resource: @PWTDataBundle/Resources/config/config.yml
/src/佩恩表的编制者/DataBundle/资源/config/config.yml:
# Twig Configuration
twig:
form:
resources:
- 'PWTDataBundle:Form:fields.html.twig'
我意识到,如果我想跨多个bundle重用表单,我需要在全局应用配置中添加一些东西。这使得bundle可以合理地自包含,在整个应用配置中只有一个小的引用。直到表单被使用时才包含javascript,并且与其他解决方案相比,树枝块的开销非常小(afaik)。
这样,无论何时使用表单,都会包含与表单相关的javascript,并且修改它只需要修改bundle,而不需要修改整个应用的config/views。它还将视图拆分,这样它们就不会有一长串的extends this, extends that(如果你有一个bundle样式,添加了formTheme标签来覆盖基束模板,就需要应用like)。
最后两段中的一些是推测,很容易有更好的方法来做这件事,但这已经足够让我继续前进了。如果有人有更好的解决方案,我很乐意阅读。