Включение активов (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 за файлами... (часы пряжи) После нескольких часов поиска ответа один из членов моей проектной группы спросил, был ли у меня этот запуск ={Сработал сразу после этого.