【问题标题】:Symfony2 Assetic wrong cssrewrite resources path in css/less filesSymfony2 Assetic错误的css/less文件中的cssrewrite资源路径
【发布时间】:2013-11-12 03:33:02
【问题描述】:

cssrewrite 过滤器在重写后产生错误的 url: 我有我的包,其中包含一个 .less 文件位于 资源/public/less/common.less

我还有一张图片,位于 Resources/public/images/colorfulbg.jpg

我从命令行运行:

php app/console assets:install web --symlink

在 web 目录中生成正确的公共结构:

web
+--bundles
   +--mybundle
      +--less
      |  +--common.less
      |
      +--images
         +--colorfulbg.jpg

在我的模板中,我有以下内容:

{% stylesheets 'bundles/mybundle/less/*' filter='cssrewrite,less' %}
  <link rel="stylesheet" href="{{ asset_url }}" type="text/css" />
{% endstylesheets %}

那个文件夹只包含一个 .less 文件,就是:

@bg: #f4f4f4;
body 
{
  background-image: @bg url(../images/colorfulbg.jpg);
}

有问题,因为重写的后台路径是:

url(../../bundles/mybundle/images/colorfulbg.jpg);

因此没有应用背景

我做错了什么?

我正在使用 symfony 2.3 和资产包 2.3 谢谢

【问题讨论】:

  • 我不明白你的意思...
  • 如果你只使用background-image: @bg url(images/colorfulbg.jpg);会发生什么?
  • url 改写自:url(../../bundles/timerbase/images/colorfulbg.jpg);到 url(../../bundles/timerbase/less/images/colorfulbg.jpg);我希望像 (../images/colorfulbg.jpg)
  • 嗯,就是这样。 ;-) 就我个人而言,我在资产方面与 SASS 分享了我的观点,结论是您只是不想这样做。希望你有更多的运气!
  • 那么,解决办法是什么?

标签: css symfony less twig assetic


【解决方案1】:

我在为assetic 指定write_to 选项时遇到了同样的问题(假设我希望我的样式输出到web/assets/css/styles.css):

assetic:
    write_to:       '%kernel.root_dir%/../web/assets'

    assets:
        my_stylesheets:
            output: 'css/styles.css'
            inputs:
                - 'bundles/mybundle/css/styles.css'

我找不到更好的解决方案,而不是为web/ 选项指定除web/ 文件夹之外的任何其他内容(或根本不指定)。但是,您仍然可以为每个单独的资产使用子文件夹:

assetic:
    write_to:       '%kernel.root_dir%/../web'

    assets:
        my_stylesheets:
            output: 'assets/css/styles.css'
            inputs:
                - 'bundles/mybundle/css/styles.css'

附:在这两种大写情况下,样式都将在 web/assets/css/styles.css 中,但在第一种情况下,csrewrite 会给出不正确的路径,而第二种情况会正常工作。

【讨论】:

    【解决方案2】:

    这是一个常见的问题,我建议你不要使用cssrewrite过滤器,而使用以/开头的url

    url("/bundles/mybundle/images/colorfulbg.jpg");
    

    当然,这种方法有一个缺点,即网站必须安装在域的根目录中,但老实说,我还没有看到 Symfony 项目安装在子目录中。

    【讨论】:

    • 即使在删除 cssrewrite 并按照您的建议使用 url 之后它也不起作用:/ 我认为 app_dev.php 会妨碍...
    • @Stormsson 你的操作系统支持符号链接吗?窗户没有。再试一次php app/console assets:install web --symlink 然后导航到 web 目录并检查路径是否正确
    • 是的,我在 osx 上。路径似乎都正确,我确认我在第一篇文章中发布的结构已经过检查
    【解决方案3】:

    您在模板中对资产使用了错误类型的定义,请参阅以下内容(注意 @ 前缀)。此外,在您的 CSS 中,您必须从 Bundle/Resources/public/less 文件夹中相对下降。所以不是/bundles/../bundles 而是 最有可能 ../images/

        {% stylesheets filter='less,cssembed,?yui_css' output='css/final.css'
            '@AcmeDemoBundle/Resources/public/beautifulslider.css'
            '@AcmeDemoBundle/Resources/public/less/site.less'
        %}
        <link href="{{ asset_url }}" type="text/css" rel="stylesheet" media="screen" />
        {% endstylesheets %}
    

    更新1

    鉴于上述情况,我的一个项目处于相同的设置中,它仍然在 2.2 上,但我认为这并不重要,我只是尝试从我的 .less 中删除这些行

        & > a {
        background:transparent url('../images/btn-big-gray.png') repeat-x;
        }
    

    后面的图片

        xxx michael [master] $ app/console assetic:dump --env=dev
    

    我恢复了线路,在再次踢了资产后他们又回来了...我认为 dis 的建议不计入 LESS 的事实?

    【讨论】:

    猜你喜欢
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 2013-02-19
    • 2011-12-13
    相关资源
    最近更新 更多