4

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

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

1) 让所有使用我的包的人在他们的 base.html.twig 中添加一行

2)添加一个<script>标签用于嵌入库到我的表单小部件

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

4

1 回答 1

0

由于您无法控制捆绑包的用户实际包含 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 %}

因此,您基本上只需将所需的所有内容存储在位于{yourBundle}/Resources/public/js. symfony2 命令assets:install将完成剩下的工作。

这样,用户可以将您的 JS 与其他供应商的 JS 一起存储在一个文件中,并使用它做更多的事情,例如缩小等。

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


如果您的 JS 代码依赖于第三方 JS 库(如 jQuery),则不应添加这些库,正如 Symfony2 Cookbook 所说:http ://symfony.com/doc/master/cookbook/bundles/best_practices.html#vendors

相反,您可能需要具有特定名称的特定资产,就像这里提到的:Managing common javascript dependencies in Symfony 2

于 2014-02-28T10:14:46.240 回答