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

时间:2016-10-14 10:10:44

标签: php css symfony assets

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

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

我使用的是非常简单的CSS结构。资产/图片仅存储在web/images内,不会被Assetic或其他内容复制/链接。因此,资产图像只需使用" direct" CSS文件的相对URL:

// 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.这是dev模式的正常行为吗?

但是,为什么我可以访问现有文件base.cssbase_base_1.css,无论是否使用了dev-mode?

如何以开发模式访问资源?

2 个答案:

答案 0 :(得分:2)

您需要在YourBundle / Resources / public /

中创建css,js和图像

然后,在2.8版本中,您需要使用命令创建指向web目录的链接。

app/console assets:install web --symlink

在模板中使用:

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

检查http://symfony.com/doc/2.8/templating.html

答案 1 :(得分:0)

参考这个,

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

您只需使用 asset() twig函数将静态资源加载到视图中即可。强烈建议不要给资产提供硬编码路径。

要将 base.css 链接到视图中,它就是这样的。

<link rel="stylesheet" href="asset('css/base.css')" type="text/css" />
无论环境如何,

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

如果您正在assetic使用CSSJS,则可以通过以下命令在开发过程中对其进行监视。

php app/console assetic:watch

这将有助于获取更新的代码而不会转储assetic