一段时间以来,我一直在努力解决根据以前的输入而改变的动态形式问题。这是我的第一个Symfony项目,所以我仍然了解一切如何协同工作。
我所拥有的是用于选择时间段的表单类型。有预设的时间段(如1分钟,5分钟,30分钟,1小时等)和一个自定义文本框,用于输入一定的秒数。此表单可以嵌入其他形式,因此(afaik)没有可以访问的标准ID。我希望自定义时间文本框仅在从预设时间列表中选择“自定义时间”(空值)时才可见。
或者,预设值可以在几秒钟内为自定义值写入一个值(并且需要在修改自定义文本框时将预设框更改为自定义)。这也是可以接受的。
如果没有使用表单构建器,这将是微不足道的JavaScript,而不是一起黑客攻击,我宁愿在可重用代码中正确地执行它,以便我知道将来。根据我的思维方式,如果有一种在表单类型本身中指定自定义表单呈现模板的方法,该模板仅适用于该表单,那就太棒了。
手指越过,这是一个很好的解决方案!
已编辑:此外,我正在使用Twig渲染我的所有视图。
答案 0 :(得分:1)
一些研究的结果得出结论,最好的方法是为窗口小部件添加字段覆盖:
/src/PWT/DataBundle/Resources/views/Form/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/PWT/DataBundle/Resources/config/config.yml:
# Twig Configuration
twig:
form:
resources:
- 'PWTDataBundle:Form:fields.html.twig'
如果我想在多个捆绑包中重用表单,我意识到我需要在全局应用配置中添加一些东西。这允许捆绑包合理地自包含,在整个app配置中只有一个小参考。在使用表单之前不会包含javascript,并且与其他解决方案(afaik)相比,twig块的开销非常小。
这样,无论何时使用,都会包含随表单一起使用的javascript,修改它只需要修改bundle,而不是整个app config / views中的任何内容。它还打破了视图,因此它们没有很长的扩展列表,扩展它(如果你有一个捆绑样式,在基本捆绑模板上添加了formTheme标记,则需要应用)。
最后两段中的一些是猜测,并且可能很容易有一个更好的方法来做到这一点,但这足以让我继续前进。如果有人有更好的解决方案,我很乐意阅读它。