Включение активов (CSS, JS) в шаблон Symfony 4 / Twig

Я изучаю Symfony и пытаюсь настроить шаблонное приложение в Symfony 4

Этот документ Symfony описывает, как включить ресурсы на вашу страницу, а именно, используя asset пакет вроде так..

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

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

Я установил этот пакет и пытаюсь сделать ссылку на файл CSS в моем /public каталог.

Я знаю, что 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 папка в корне?

1 ответ

Решение

Пути в asset Функция должна относиться к вашей общедоступной директории, а не к корню проекта.

Итак, притворяясь, что документация вашего сервера public_htmlи актив находится в public_html/css/main.cssвызов актива будет {{ asset('css/main.css') }},

Дополнительное примечание: функция актива не дает вам возможности размещать активы вне публичного каталога. Они должны быть в общедоступном каталоге.

Во-первых, возможно, вам нужно добавить функциональность активов в Symfony:

composer require symfony/asset

Затем вы должны использовать в Twig temlate относительный путь к вашему общедоступному каталогу:

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

для public/css/style.css файл стиля.

Кстати, это также работает для Symfony 5.

Проверить, наблюдает ли webpack за файлами... (часы пряжи) После нескольких часов поиска ответа один из членов моей проектной группы спросил, был ли у меня этот запуск ={Сработал сразу после этого.

Другие вопросы по тегам