在Symfony 4/Twig Template中包含Assets(CSS,JS)

yev*_*evg 5 css php symfony twig symfony4

我正在学习Symfony并尝试在Symfony 4中设置样板应用程序

这个Symfony文档描述了如何在页面中包含资源,即使用这样的asset包.

<img src="{{ asset('images/logo.png') }}" alt="Symfony!" />

<link href="{{ asset('css/blog.css') }}" rel="stylesheet" /> 
Run Code Online (Sandbox Code Playgroud)

我已安装此软件包并尝试链接到我的/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>
Run Code Online (Sandbox Code Playgroud)

问题

当我加载路径/页面/模板时,链接的css将呈现为来自根的简单链接(就像我将其链接为<link href="public/css/main.css" rel="stylesheet" />- 当然没有路由设置,public/*并且返回404/Not Found.

好像asset()甚至没有使用该功能.

我试过了

  • 重新启动我的本地Symfony服务器
  • 将资产移动到assets根目录上的文件夹,相应地调整链接
  • 验证asset包已安装(它是)
  • 谷歌搜索这个问题(Symfony 4没有)

问题

  • 我怎样才能让Symfony知道public/*路径是资产的文件系统路径,而不是URL路由,并成功包含我的资产?
  • 是否有这样的功能为/assets根目录下的推荐文件夹以外的资产设置默认位置?

sim*_*aun 15

asset函数中的路径应该与您的公共目录相关,而不是项目根目录.

所以,假装你的服务器的文档根是public_html和资产是public_html/css/main.css,资产的呼叫会{{ asset('css/main.css') }}.

附加说明:资产功能不允许您将资产放在公共目录之外.它们必须位于公共目录中.

  • @zoore 仅当您选择使用 Encore 时。你不必。Twig 的资产功能保持不变。此外,这些配置不会“加载到 Twig”。您只是在 Twig 中使用 `asset` 来指向 Encore 构建资产的位置,与任何其他静态资产一样。 (2认同)