在Symfony 4 / Twig模板

时间:2018-02-21 18:28:33

标签: php css symfony twig symfony4

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

This Symfony document介绍了如何在页面中包含资源,即使用asset这样的包。

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

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

我已安装此软件包并尝试链接到/public目录中的css文件。

我知道Symfony建议将资源放在根目录的/assets文件夹中,但我想尽可能避免这种情况。将资产放在公共目录中对我来说更有意义。

My 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" /> - 当然没有{{1}的路由集这将返回public/*

好像甚至没有使用404/Not Found函数。

我已尝试过

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

问题

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

3 个答案:

答案 0 :(得分:10)

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

因此,假装您的服务器的docroot为public_html,资产位于public_html/css/main.css,资产调用将为{{ asset('css/main.css') }}

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

答案 1 :(得分:2)

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

composer require symfony/asset

然后,您应该在Twig中使用它来确定公共目录的相对路径:

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

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

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

答案 2 :(得分:0)

检查webpack是否正在监视文件...(监视纱线)经过数小时的搜索答案后,我的一个项目团队成员询问我是否正在运行==之后立即工作。