【问题标题】:Serving relative images using assetic使用资产提供相对图像
【发布时间】:2012-03-19 01:32:53
【问题描述】:

我正在尝试了解 symfony2 资产包。 我正在尝试使用一个使用它自己的 css 文件的 jquery 插件。我把所有东西都放在mybundle/Resources/public 中,然后拆分成 images/javascript/ 和 css/

插件 css 使用相对路径来获取像 ../images/sprite.png 这样的图像

使用assetic提供css文件:

{% stylesheets
    '@MyBundle/Resources/public/css/mycss.css' 
%}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}

assetic 生成的路径是/app_dev.php/css/mycss.css,我猜是正确的。显然,相对图像路径现在不再起作用了。因为文件本身位于 mybundle/Resources/public 而不是 /images/

当尝试使用 cssrewrite 过滤器时,路径被重写为: http://server.com/Resources/public/images/sprite.png。但这不正确,文件不在那里。

如何使用资产提供相关图像?

【问题讨论】:

标签: php symfony assets assetic


【解决方案1】:

你可以拼出输出路径,完全不用cssrewrite。

{% stylesheets output="bundles/zaysoarbiter/css/forms2.css"
    '@ZaysoArbiterBundle/Resources/public/css/forms2.css'
%}

然后当然你使用assets:install 将你的图像复制到web/bundles/bundle/images 或任何地方。就浏览器而言,您的 css 和图像现在相对于彼此定位。在生产环境中,您将使用assetic:dump 来移动实际生成的 css 文件。

【讨论】:

  • 使用此方案时,dev环境中图片的路径为:app_dev.php/bundles/mybundle/images/sprite.png,导致NotFoundHttpException。您是否也有为他们提供开发环境的解决方案?
  • 由于图像往往不会改变,我只使用asset:install 将它们安装在我的开发机器上。因此,当 css 动态生成时,图像就坐在那里。您可以使用 --symlink 选项来避免制作实际副本。
  • 我想我有点错误地描述了我的问题。当我的网址中有“app.php”或“app_dev.php”时(例如:app.php/bundles/mybundle/images/sprite.png),结果是404。离开app.php/app_dev.php时(例如:bundles/mybundle/images/sprite.png),路径很好并且正在提供图像。 Assetic 通过您当前的环境提供 css 文件。如果您使用的是 app_dev.php,它也在所有资产生成的样式 url 中。意味着所有相对图像路径(在 .css 文件中)也使用 app_dev.php,导致我上面提到的 url。
  • 好的。我使用 symfony web 目录中提供的标准 .htaccess,所以我的网址中实际上没有 app_dev.php。 .htaccess 文件负责在调用 php 代码之前检查是否正在请求 web 目录下的真实文件。
猜你喜欢
  • 2017-10-16
  • 2015-09-14
  • 2014-08-04
  • 2011-09-27
  • 2019-06-15
  • 2011-09-21
  • 2018-10-10
  • 2015-06-11
  • 2020-08-13
相关资源
最近更新 更多