【问题标题】:Symfony2 form builder JavaScript manipulation of form data/structureSymfony2 表单构建器 表单数据/结构的 JavaScript 操作
【发布时间】:2011-10-14 05:37:11
【问题描述】:

一段时间以来,我一直在努力解决根据先前输入而变化的动态表单的问题。这是我的第一个 Symfony 项目,所以我仍然在掌握一切如何协同工作的窍门。

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

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

如果不使用表单构建器,这将是微不足道的 JavaScript,但与其将某些东西拼凑在一起,我更愿意在可重用的代码中正确地完成它,以便我知道未来。在我看来,如果有一种方法可以在表单类型本身中指定一个自定义表单呈现模板,该模板仅适用于该表单,那就太棒了。

希望有一个很好的解决方案!

已编辑:另外,我正在使用 Twig 来呈现我的所有视图。

【问题讨论】:

  • 我也有一个嵌入式表单,输入字段有一个可以访问的id,像这样:uc_legalbundle_filmtype_identifiers_11_identifier
  • 如果这不是您的情况,也许您应该更新...您是否使用了自定义表单主题?如果是,您是否覆盖了任何内容?
  • 我已经覆盖了一些东西,但是设置表单 ID 可以工作。有没有办法只在加载该特定表单时包含该 JS? (最好每次加载该表单时,不需要任何额外的工作,例如包含额外的模板)

标签: php symfony


【解决方案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'

我意识到,如果我想跨多个包重用表单,我需要在全局应用配置中添加一些内容。这允许捆绑包合理地自包含,在整个应用程序配置中只有一个小的参考。在使用表单之前不包含 javascript,并且与其他解决方案 (afaik) 相比,twig 块的开销非常小。

这样,无论何时使用表单都会包含与表单一起使用的 javascript,并且修改它只需要修改捆绑包,而不是整个应用程序配置/视图中的任何内容。它还分解了视图,因此它们没有很长的扩展列表,扩展它(如果您有一个添加了 formTheme 标记以覆盖基本包模板的包样式,则需要应用)。

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

【讨论】:

    猜你喜欢
    • 2021-01-13
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多