Symfony2 - Assetic - 在CSS中加载图像

LBr*_*dge 59 css assets image background-image symfony

我有一个包含主要css文件和图像的CoreBundle.现在我从css加载图像时出现问题; 图像未显示.

 background-image:url(../images/file.png)
Run Code Online (Sandbox Code Playgroud)

(它有一个完整的路径)

我使用命令安装了资产:assets:install web我可以在下面看到图像和css文件web/bundles/cmtcore/(css|images).

这是核心包内的文件结构:

/CoreBundle
    /Resources
        /public
            /css
                /main.css
            /images
                /file.png
Run Code Online (Sandbox Code Playgroud)

以下是我将css文件加载到模板中的方法:

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

提前谢谢你的帮助.

Ino*_*ryy 54

使用cssrewriteAssetic包中的过滤器

在config.yml中:

assetic:
    debug:          %kernel.debug%
    use_controller: false
    filters:
        cssrewrite: ~
Run Code Online (Sandbox Code Playgroud)

然后像这样调用样式表:

 {% stylesheets 'bundles/cmtcore/css/*' filter='cssrewrite' %}
        <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" />
 {% endstylesheets %}
Run Code Online (Sandbox Code Playgroud)

哦,别忘了使用 php app/console assetic:dump

  • 我对这个解决方案的问题是symfony尝试在/ Resources/public/css/*上查找/应该查找/ bundles/mybundle/images/...的任何想法吗? (13认同)
  • 好吧,cssrewrite正在将我的图像路径重写为/ Resources/public/css/*当它应该重写为/ bundles/mybundle/images /你知道在cssrewrite中改变它的方法吗? (10认同)
  • Inor - 使用默认资产配置(这是你上面使用的)我得到的问题与Clint相同.css和js文件很好但是在css文件中,当它应该在"bundle/bundlename/img"中查找时,它会在"../../Resources/Public/css/img"中查找图像? (8认同)

use*_*980 17

ccsrewrite几乎没有问题:

使用AsseticBundle中的@MyBundle语法引用资产时,CssRewrite过滤器不起作用.这是一个已知的限制.

这是cssrewrite的php版本:

<?php 
    foreach ($view['assetic']->stylesheets(array(
        'bundles/test/css/foundation/foundation.css',
        'bundles/test/css/foundation/app.css',
        'bundles/test/css/themes/adapzonManager.css'), array('cssrewrite')) as $url):
?>
    <link rel="stylesheet" href="<?php echo $view->escape($url) ?>" />
<?php endforeach; ?>
Run Code Online (Sandbox Code Playgroud)

  • 为什么不用树枝? (7认同)

小智 13

我按照本网站上的说明解决了这个问题:http: //www.craftitonline.com/2011/06/symfony2-beautify-with-assetic-and-a-template-part-ii/

实际问题是您引用了bundle资源的绝对值,但必须相对引用它们.

{% stylesheets filter='cssrewrite' output='css/*.css'
    'bundles/blistercarerisikobewertung/css/*'  %}
    <link href="{{ asset_url }}" type="text/css" rel="stylesheet" />
{% endstylesheets %}
Run Code Online (Sandbox Code Playgroud)

清除缓存并再次安装资产


小智 6

关于Yann的答案,如果您使用该--symlink选项,实际上您不必在每次更改后重新安装资产.

但请注意,运行供应商安装脚本将覆盖符号链接,因此在运行供应商脚本后,您需要删除bundles/*文件夹并--symlink再次使用该选项安装资产.


fkr*_*han 6

我开发了一个带有额外过滤器的小捆绑来解决这个问题.你可以在github上找到它:https://github.com/fkrauthan/FkrCssURLRewriteBundle.git

如果您的css文件中有相对路径,那么使用此捆绑包可以使用@Notation for assetic.