Symfony2在哪里共享CSS和JS资产,最佳实践明智吗?

时间:2011-08-01 19:37:52

标签: symfony

我通常将我的JS和CSS Assetic资产放在DefaultBundle中,但我认为放置它们的最佳位置是app / Resources / public /(js | css)文件夹。

另外,要引用我们使用的资产:

{% javascripts filter="" output="js/core.js" debug=true
    "@DefaultBundle/Resources/public/js/jquery-1.6.2.js" %}
    <script src="{{ asset_url }}" type="text/javascript"></script>
{% endjavascripts %}

如何在app / Resources / public /...中添加引用共享资源(如jQuery和CSS重置样式表)

4 个答案:

答案 0 :(得分:27)

你也可以使用它:

{% stylesheets '../app/Resources/public/css/*' %}
    <link href="{{ asset_url }}" type="text/css" rel="stylesheet" />
{% endstylesheets %}

答案 1 :(得分:24)

是的,不将库放在Bundle

中是个不错的选择

见这里:http://symfony.com/doc/current/cookbook/bundles/best_practices.html#vendors

  

捆绑包不应嵌入用JavaScript,CSS或任何其他语言编写的第三方库。


我建议你将jquery和重置文件放在:app/Resources/public/js/jquery.min.js之下,并用以下内容更改你的代码:

{% javascripts filter="" output="js/core.js" debug=true
    "../app/Resources/public/js/jquery-1.6.2.js" %}
    <script src="{{ asset_url }}" type="text/javascript"></script>
{% endjavascripts %}

我希望这对你有用。

编辑:编辑后的答案就像https://stackoverflow.com/a/9237004/505836一样,感谢大卫。

答案 2 :(得分:8)

我的解决方案与David的解决方案几乎相同,但是使用%kernel.root_dir%而不是硬编码app文件夹(尽管我怀疑很多人更改了此文件夹的名称),例如:

{%- javascripts output='compiled/main.js'
    '%kernel.root_dir%/Resources/public/js/jquery-1.10.2.min.js'
    '%kernel.root_dir%/Resources/public/js/underscore-1.5.2.min.js'
    '@MyOwnBundle/Resources/public/js/default.js'
-%}
    <script src='{{ asset_url }}'></script>
{%- endjavascripts %}

如果第三方库引用他们自己的资产(例如,通常是从.css文件引用的img子文件夹中的图像),通常就足以在服务器上创建相应的符号链接,例如: ln -s .../app/Resources/public/img .../web/img或类似的东西。或者当然使用cssrewrite过滤器 - 但要注意它的警告。

(另请注意,我不使用type="<mime-type>"属性,因为无论如何都在HTTP头中提供了文件的内容类型。)

答案 3 :(得分:2)

您可以../app/Resources/public/css/替换public/css/。 Javascript文件夹也一样。

{% stylesheets filter='less' output='css/core' 'public/css/*' %}

      <link href="{{ asset_url }}" type="text/css" rel="stylesheet" />

{% endstylesheets %}

{% javascripts "public/js/*" %}

      <script src="{{ asset_url }}" type="text/javascript"></script>

{% endjavascripts %}

此处/web/public文件夹的所有文件都会自动加载。