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 %}
提前谢谢你的帮助。
从资产包中使用cssrewrite
filter
在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中完成的方式。
我没有解决这个问题,因为这看起来很愚蠢。