Symfony2 – CSS中的资产负载图像

我有一个CoreBundle包含主要的CSS文件和图像。 现在我有一个问题,当我从CSS加载图像; 图像不显示。

background-image:url(..http://img.dovov.comfile.png) 

(具有完整的path)

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

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

 /CoreBundle /Resources /public /css /main.css /images /file.png 

这是我如何加载到模板的CSS文件:

  {% stylesheets '@CmtCoreBundle/Resources/public/css/*' %} <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" /> {% endstylesheets %} 

提前谢谢你的帮助。

从资产包中使用cssrewritefilter

在config.yml中:

 assetic: debug: %kernel.debug% use_controller: false filters: cssrewrite: ~ 

然后像这样调用你的样式表:

  {% stylesheets 'bundles/cmtcore/css/*' filter='cssrewrite' %} <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" /> {% endstylesheets %} 

哦,不要忘记使用php app/console assetic:dump

ccsrewrite问题很less:

在AsseticBundle中使用@MyBundle语法来引用资产时,CssRewritefilter不起作用。 这是一个已知的限制。

这里是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; ?> 

我按照本网站上的说明解决了这个问题: 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 %} 

清除caching并再次安装您的资产

关于Yann的回答,实际上,如果您使用--symlink选项,则每次更改后都不必重新安装资产。

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

我已经开发了一个额外的filter来解决这个问题的小捆绑。 你可以在github上find它: https : //github.com/fkrauthan/FkrCssURLRewriteBundle.git

如果你的css文件中有相对path的话,使用这个bundle就可以实现资产的@Notation。

我使用htaccess解决了这个问题:

我的资产存储在src / Datacode / BudgetBundle / Resources / public /(css | img | js)中,资产输出参数设置为写入:bundles / datacodebudget / css / styles.css(在web目录中)

在我的CSS我使用相对path../来引用图像。

这是.htaccess规则:

 # Make image path work on dev # ie /app_dev.php/bundles/datacodebudget/img/glyphicons-halflings-white.png rewrites to /bundles/datacodebudget/img/glyphicons-halflings-white.png RewriteRule ^app_dev\.php/(.*)/(.*)/img/(.*)$ /$1/$2/img/$3 [L] 

我的CSS加载如下:

 {% stylesheets '@DatacodeBudgetBundle/Resources/public/css/bootstrap.css' '@DatacodeBudgetBundle/Resources/public/css/bootstrap-responsive.css' '@DatacodeBudgetBundle/Resources/public/css/styles.css' '@DatacodeBudgetBundle/Resources/public/css/chosen.css' output="bundles/datacodebudget/css/styles.css" %} <link href="{{ asset_url }}" rel="stylesheet" type="text/css" /> {% endstylesheets %} 

在我的config.yml文件中,我有:

 assetic: use_controller: true 

其中(没有htaccess重写)导致图像不加载,因为图像的相对path是在app_dev.php / bundles / datacodebudget / img / someimage.jpg。 使用cssrewritefilter不起作用,因为它然后将../img重写为../../../../Resources/public/img/它parsing为Resources / public / img。

通过使用htaccess方法的图像加载正常,我只需要运行资产:转储/资产:安装时,我添加新的图像或想推动更改生产。

我通过在'symfony_root / web /'文件夹中永久创build'images'文件夹来解决这个问题。 结果:'symfony_root / web / images /' – 它变得非常棒!

我有类似的问题,至less有一天我已经四处打听了,而且我不相信这个问题有很好的实际解决scheme。 我推荐使用Assetic处理javascript和css,然后把你的图像放在你的网站的文档根目录下。 例如,如果你有一个引用..http://img.dovov.comfile.png的css文件,只需在你的docroot下创build和映像文件夹,并把file.png放在那里。; 这绝对不是最好的理论解决scheme,但是这是我能find的唯一真正有用的方法。

我“解决了”这个加载的CSS文件不同:

 <link rel="stylesheet" href="{{ asset('bundles/cmtcore/css/main.css') }}" type="text/css" media="all" /> 

这是在Acme / DemoBundle中完成的方式。

我没有解决这个问题,因为这看起来很愚蠢。