我正在使用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.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.这是dev模式的正常行为吗?
但是,为什么我可以访问现有文件base.css
和base_base_1.css
,无论是否使用了dev-mode? p>
如何以开发模式访问资源?
答案 0 :(得分:2)
您需要在YourBundle / Resources / public /
中创建css,js和图像然后,在2.8版本中,您需要使用命令创建指向web目录的链接。
app/console assets:install web --symlink
在模板中使用:
asset('bundles/yourbundlename/css|js|images...')
答案 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
使用CSS
和JS
,则可以通过以下命令在开发过程中对其进行监视。
php app/console assetic:watch
这将有助于获取更新的代码而不会转储assetic
。