我正在学习 Symfony 并尝试在 Symfony 4 中设置样板应用程序
这个 Symfony 文档 描述了如何在你的页面中包含资产,即使用 asset
包,像这样..
<img src="{{ asset('images/logo.png') }}" alt="Symfony!" />
<link href="{{ asset('css/blog.css') }}" rel="stylesheet" />
我已经安装了这个包并试图链接到我的 /public
目录中的一个 css 文件。
我知道 Symfony 建议将资产放在根目录下的 /assets
文件夹中,但如果可能的话,我想避免这种情况。将资产放在公共目录中对我来说更有意义。
我的 Twig 基本模板如下:
<html>
<head>
<meta charset="UTF-8">
<title>{% block title %}Welcome!{% endblock %}</title>
{% block stylesheets %}
<link href="{{ asset('public/css/main.css') }}" rel="stylesheet" />
{% endblock %}
</head>
<body>
{% block body %}{% endblock %}
{% block javascripts %}{% endblock %}
</body>
<footer>footer</footer>
</html>
问题
当我加载路由/页面/模板时,链接的 css 被呈现为来自根的简单链接(好像我将其链接为 <link href="public/css/main.css" rel="stylesheet" />
- 当然没有为 public/*
设置路由 ---
这将返回 404/Not Found
。
就好像 asset()
功能甚至没有使用。
我试过了
- 重新启动我的本地 Symfony 服务器
- 在相应调整链接时将资产移动到根目录下的
assets
文件夹 - 验证
asset
软件包已安装(它是) - 谷歌搜索这个问题(Symfony 4 没有)
问题
- 我如何让 Symfony 知道
public/*
路径是资产的文件系统路径,而不是 URL 路由,并成功包含我的资产? - 除了推荐的
/assets
文件夹之外,是否有这样的功能可以为资产设置默认位置?
原文由 yevg 发布,翻译遵循 CC BY-SA 4.0 许可协议
asset
函数中的路径应该相对于您的公共目录,而不是项目根目录。因此,假设您的服务器的 docroot 是
public_html
,并且资产在public_html/css/main.css
,资产调用将是{{ asset('css/main.css') }}
。附加说明:asset 函数不能让您将资产放在公共目录之外。它们 必须 在公共目录中。