在 Symfony 4 / Twig 模板中包含资产(CSS、JS)

新手上路,请多包涵

我正在学习 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 许可协议

阅读 609
2 个回答

asset 函数中的路径应该相对于您的公共目录,而不是项目根目录。

因此,假设您的服务器的 docroot 是 public_html ,并且资产在 public_html/css/main.css ,资产调用将是 {{ asset('css/main.css') }}

附加说明:asset 函数不能让您将资产放在公共目录之外。它们 必须 在公共目录中。

原文由 simshaun 发布,翻译遵循 CC BY-SA 3.0 许可协议

首先,也许您必须将资产功能添加到 Symfony:

 composer require symfony/asset

然后你应该在 Twig 模板中使用公共目录的相对路径:

 <link href="{{ asset('css/style.css') }}" rel="stylesheet" />

对于 public/css/style.css 样式文件。

顺便说一句,它也适用于 Symfony 5。

原文由 simhumileco 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题