【发布时间】:2016-10-14 19:09:55
【问题描述】:
我正在使用 Symfony 2.8 并遇到问题,在使用开发控制器 app_dev.php 时无法找到 web/ 目录中的真实文件 (HTTP Error 400):
web/
css/
base.css
base_base_1.css
images/
someFile.png
我使用了一个非常简单的 CSS 结构。资产/图像仅存储在web/images 中,不会被Assetic 或其他东西复制/链接。因此,资产图像使用“直接”相对 URL 与 CSS 文件简单地链接:
// AppBundle/Resources/styles/base.scss
.someClass {
background: url("../images/someFile.png") no-repeat 0 0;
}
// Page Template
{% stylesheets
'@AppBundle/Resources/styles/base.scss'
filter="scssphp"
output="css/base.css" %}
<link rel="stylesheet" href="{{ asset_url }}" type="text/css" />
{% endstylesheets %}
根据是否使用app_dev.php,这将导致使用base.css 或base_base_1.css:
// app_dev.php NOT uses
<link rel="stylesheet" href="/css/base.css" type="text/css" />
// app_dev.php used
<link rel="stylesheet" href="app_dev.php/css/base_base_1.css" type="text/css" />
不管app_dev.php是否使用,在两个.css文件中,图片的路径都是一样的:url("../images/someFile.png")
但是,当调用 example.com/somepage 时一切正常,而调用或 example.com/app_dev.php/somepage 我得到一个 Error 404:
URL: /app_dev.php/images/someFile.png
Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException
当我手动测试时,结果是一样的:example.com/app_dev.php/images/someFile.png 导致错误,而example.com/images/someFile.png 加载没有任何问题。
我做错了什么?
我创建了一个测试文件web/test.php 显示相同的行为:在正常模式下调用没问题,在app_dev.php 中调用产生404。这是开发模式的正常行为吗?
但是为什么我可以访问现有的文件base.css和base_base_1.css,无论是否使用dev-mode?p>
我该怎么做才能在开发模式下访问资产?
【问题讨论】:
-
真实资产不应该通过前端控制器,它们直接由网络服务器提供服务。如以下答案所述,您还可以/应该使用 twig 中的
asset函数来构建资产路径。