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

jos*_*erk 35 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 %}
Run Code Online (Sandbox Code Playgroud)

我如何在app/Resources/public/...中引用共享资源,如jQuery和我的CSS重置样式表?

Dav*_*ett 27

你也可以用这个:

{% stylesheets '../app/Resources/public/css/*' %}
    <link href="{{ asset_url }}" type="text/css" rel="stylesheet" />
{% endstylesheets %}
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法可以扩展到app/Resources/public/images中的图像? (3认同)

jul*_*bou 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 %}
Run Code Online (Sandbox Code Playgroud)

我希望这对你有用.

编辑:编辑的答案就像/sf/answers/646590311/,谢谢大卫.

  • 将javascript文件放在非公共文件夹中是没用的,因为该文件将由客户端浏览器下载,然后将公开;) (4认同)
  • 不,不,这不是资产的方式!Assetic的目的是在生产环境中提供原始文件或编译文件.如果您的JS文件不应该直接访问,请不要将它放在Web文件夹中,它会有两次(您放置的原始文件和资产输出).相反,将其放到"app/Resources/public/js/jquery-1.6.2.js"并传递此路径的资产. (2认同)

Mar*_*Lie 8

我的解决方案几乎是一样的大卫的,但用%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 %}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我最喜欢这个答案. (2认同)