在 Symfony 2.8 中使用 app_dev.php 时无法访问真实文件

Cannot access real files when using app_dev.php in Symfony 2.8

我正在使用 Symfony 2.8 并遇到问题,在使用开发控制器 app_dev.php 时无法找到 web/ 目录中的真实文件 (HTTP Error 400):

web/
    css/
        base.css
        base_base_1.css
    images/
        someFile.png

我使用的是一个非常简单的 CSS 结构。 assets/images 仅存储在 web/images 中,而不是由 Assetic 或其他东西存储在 copied/linked 中。因此,资产图像使用 "direct" 相对 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.cssbase_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.cssbase_base_1.css

我该怎么做才能在开发模式下访问资产?

参考这个,

http://symfony.com/doc/current/templating.html#linking-to-assets

您可以简单地使用 asset() twig 函数将静态资产加载到视图中。强烈建议不要提供资产的硬编码路径。

要linkbase.css进入视野,就会是这样的。

<link rel="stylesheet" href="asset('css/base.css')" type="text/css" />

asset() 将始终指向您的 /web 目录,无论环境如何。您还可以添加每个资产的 version,以确保资产在生产中使用时是最新的。

如果您将 assetic 用于 CSSJS,您可以在开发期间通过以下命令将其置于监视状态。

php app/console assetic:watch

这将有助于在不转储 assetic 的情况下获取更新的代码。

你需要创建css,js和图片到YourBundle/Resources/public/

然后,在 2.8 版本中,您需要使用命令创建 link 到 web 目录。

app/console assets:install web --symlink

并在模板中使用:

asset('bundles/yourbundlename/css|js|images...')

勾选http://symfony.com/doc/2.8/templating.html