我创建了自己的小型Symfony2表单类型。为了使其正常工作,我需要包含一个js库。虽然在单个Web应用程序中使用这种新表单类型时这是一项简单的任务,但当我决定将该表单类型移动到专用包以使其可重用时,它变得更加困难。
目前,我知道两种可能的解决方案
1)让每个使用我的包的人都在他们的base.html.twig
中添加一行 2)添加<script>
标记以将库嵌入到表单小部件
他们两个都不是很聪明,所以我的问题是:我该如何做得更好?特别是,如果我的表单类型可以在一个页面上多次包含。更糟糕的是,如果我的表格类型要求例如JQuery存在,但我不知道,如果JQuery已经加载到应用程序中。
答案 0 :(得分:0)
由于您没有任何关于捆绑包用户实际包含JS的位置的控制(我知道::base.html.twig
文件中没有包含它们的项目,但是在名为{{1}的文件中在应用程序的主要包中),一个好方法是提供一个JavaScript文件,然后可以通过Assetic包含,如下所示:
layout.html.twig
因此,您基本上只需将所需内容存储在{% javascripts debug=false output="js/bundles.js"
'@YourVendorAndBundleName/Resources/public/js/formtype.js'
%}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
中的一个文件中。 symfony2命令{yourBundle}/Resources/public/js
将完成其余的工作。
通过这种方式,用户可以将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