在Symfony2表单小部件中包含Javascript

在Symfony2表单小部件中包含Javascript,javascript,forms,symfony,widget,Javascript,Forms,Symfony,Widget,我已经创建了自己的小Symfony2表单类型。为了让它正常工作,我需要包含一个js库。虽然在单个web应用程序中使用此新表单类型时这是一项简单的任务,但当我决定将该表单类型移动到专用捆绑包以使其可重用时,这变得更加困难 目前,我知道两种可能的解决方案 1) 请使用my bundle的每个人在他们的base.html.twig中添加一行 2) 添加一个标记,用于将库嵌入我的表单小部件 他们两个都不是很聪明,所以我的问题是:我如何做得更好?特别是,如果我的表单类型可以在一个页面上包含多次。更糟糕的是

我已经创建了自己的小Symfony2表单类型。为了让它正常工作,我需要包含一个js库。虽然在单个web应用程序中使用此新表单类型时这是一项简单的任务,但当我决定将该表单类型移动到专用捆绑包以使其可重用时,这变得更加困难

目前,我知道两种可能的解决方案

1) 请使用my bundle的每个人在他们的base.html.twig中添加一行

2) 添加一个
标记,用于将库嵌入我的表单小部件


他们两个都不是很聪明,所以我的问题是:我如何做得更好?特别是,如果我的表单类型可以在一个页面上包含多次。更糟糕的是,如果我的表单类型要求JQuery出现,但我不知道JQuery是否已经加载到应用程序中。

因为您无法控制捆绑包的用户实际包含JS的位置(我知道一些项目没有包含在
::base.html.twig
文件中,而是包含在应用程序主捆绑包中名为
layout.html.twig
的文件中),一个好方法是提供一个JavaScript文件,然后可以通过Assetic将其包含,如下所示:

{% javascripts debug=false output="js/bundles.js"
    '@YourVendorAndBundleName/Resources/public/js/formtype.js'
%}
    <script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
{%javascripts debug=false输出=“js/bundles.js”
“@YourVendorAndBundleName/Resources/public/js/formtype.js”
%}
{%endjavascripts%}
因此,您基本上只需将所需的所有内容存储在
{yourBundle}/Resources/public/js
中的一个文件中。symfony2命令
assets:install
将完成其余工作

通过这种方式,用户可以将您的JS与其他供应商的JS一起存储在一个文件中,并使用它进行更多操作,如缩小尺寸等

重要提示:请确保将其添加到您的安装/使用指南中


如果您的JS代码依赖于第三方JS库(如jQuery),则不应添加这些库,正如Symfony2食谱所说:

相反,您可能需要具有特定名称的特定资产,如下所述: