Я сделал миграцию Symfony с версии 2.7 на версию 3.4
Все в порядке, кроме одного. Файлы twig не работают, появляется сообщение об ошибке:
Unable to find template "::layout.html.twig" (looked into: vendor\symfony\symfony\src\Symfony\Bridge\Twig/Resources/views/Form, vendor\knplabs\knp-menu\src\Knp\Menu/Resources/views) in abcdBundle::layout.html.twig at line 3.
Код веточки:
{% extends "::layout.html.twig" %}
Я хочу загрузить локализованный макет на app/Resources/views/layout.thml.twig.
Я тоже пробовал этот код: {% extends "layout.html.twig" %} без :: такие же проблемы.
Файлы местоположения:
app/
Resources/
views/
layout.html.twig // it don't find this twig
src/
ab/
cdBundle/
Ressources/
views/
layout.html.twig // error into this file
@Cerad Хорошо, но как решить мою проблему? Я уже видел этот пост. Но я так и не понял, как заставить мою веточку снова заработать.
Используйте пространства имен twig (предпочтительные решения) или добавьте механизм twig в конфигурацию шаблона, как показано в самом конце, по общему признанию, длинного ответа. Я предполагаю, что все это работало под вашим приложением 2.7, и в нем нет опечаток и т. д.
@Cerad Я уже добавил конфигурацию шаблонов. Все работало да до миграции. Я пробовал этот код: {% extends "@App/layout.html.twig "%} (с пространством имен), у меня эта ошибка There are no registered paths for namespace" App ".
Для версии 3.4 я ожидал бы @ AppBundle / layout.html.twig. «bin / console debug: twig» покажет вам доступные пространства имен. Но простой layout.html.twig действительно должен работать. И хотя я подозреваю, что это всего лишь опечатка в вопросе, Ressources написано неправильно. Я знаю, что это может сбивать с толку, потому что в 3.4 поддерживается несколько различных структур каталогов.
@Cerad Большое спасибо, я нашел решение с вашими источниками.






Я обновил файл config.yml, чтобы добавить:
twig:
paths:
'%kernel.project_dir%/app/Resources/views': app
Это добавило @app "Пространство имен" в "Пути загрузчика" bin/console debug:twig
Теперь, когда я использую {% extends "@app/layout.html.twig" %}, он работает нормально.
Спасибо @Cerad за вашу помощь, это очень ценно
Рад, что у тебя все получилось. Просто из любопытства, показывает ли debug: twig пространство имен "(None), которое, возможно, указывает на шаблоны?"
@Cerad Да! Внизу списка есть «Нет», указывающее на vendor\symfony\symfony\src\Symfony\Bridge\Twig/Resources/views/Form\ . В этом ли причина проблемы?
Я так думаю. None - это расположение по умолчанию для шаблонов, и в новой структуре каталогов Symfony он указывает на project / templates. Не знаю, почему он указывает на каталог моста Twig. Вы можете попробовать что-нибудь вроде '% kernel.project_dir% / templates': '' и посмотреть, сможете ли вы избавиться от необходимости в пространстве имен приложения. Это также поможет, если вы когда-нибудь перейдете на 4x.
Если этот путь %kernel.root_dir%/Resources/views действительно существует, он автоматически добавляется к путям Twig (без пространства имен (None)), и поэтому {% extends "layout.html.twig" %} должен работать.
И каталог моста Twig существует (без пространства имен), потому что он зарегистрирован TwigBundle для легкого поиска / использования / расширения из любого макета темы формы (например, form_div_layout.html.twig).
Что касается отсутствующего пути %kernel.project_dir%/templates/, необходимо, чтобы каталог существовал для добавления к путям Twig (он применяется для всех путей).
Если вы хотите сделать свой проект более надежным и готовым к будущим миграциям на Symfony 4 - подумайте о перемещении всего вашего Resources из каталога app/.
Вы можете найти больше, т.е. здесь:
http://fabien.potencier.org/symfony4-directory-structure.html
Пути к шаблону на основе двоеточия больше не поддерживаются по умолчанию. stackoverflow.com/questions/47832977/…