Symfony2表单构建器表单数据/结构的JavaScript操作

时间:2011-10-14 05:37:12

标签: php symfony

一段时间以来,我一直在努力解决根据以前的输入而改变的动态形式问题。这是我的第一个Symfony项目,所以我仍然了解一切如何协同工作。

我所拥有的是用于选择时间段的表单类型。有预设的时间段(如1分钟,5分钟,30分钟,1小时等)和一个自定义文本框,用于输入一定的秒数。此表单可以嵌入其他形式,因此(afaik)没有可以访问的标准ID。我希望自定义时间文本框仅在从预设时间列表中选择“自定义时间”(空值)时才可见。

或者,预设值可以在几秒钟内为自定义值写入一个值(并且需要在修改自定义文本框时将预设框更改为自定义)。这也是可以接受的。

如果没有使用表单构建器,这将是微不足道的JavaScript,而不是一起黑客攻击,我宁愿在可重用代码中正确地执行它,以便我知道将来。根据我的思维方式,如果有一种在表单类型本身中指定自定义表单呈现模板的方法,该模板仅适用于该表单,那就太棒了。

手指越过,这是一个很好的解决方案!

已编辑:此外,我正在使用Twig渲染我的所有视图。

1 个答案:

答案 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标记,则需要应用)。

最后两段中的一些是猜测,并且可能很容易有一个更好的方法来做到这一点,但这足以让我继续前进。如果有人有更好的解决方案,我很乐意阅读它。