Я работаю над обновлением Zikula с Symfony 3 до Symfony 4 (я работаю конкретно в этот PR на данный момент). Частично это связано с удалением старого механизма шаблонов в Symfony и полным переходом на Twig. В процессе я столкнулся с очень необычной проблемой: ни одно из настраиваемых расширений Twig в включенные пакеты или псевдо-пакеты (это просто пакеты с именем Modules) загружаются и доступны в шаблонах.
Да, класс расширений автоматически подключается и загружается, и да они доступны, т. е. перечислены в bin/console debug:container
и, в частности, если я делаю что-то вроде
me% bin/console debug:container AdminExtension
Information for Service "Zikula\AdminModule\Twig\Extension\AdminExtension"
==========================================================================
---------------- --------------------------------------------------
Option Value
---------------- --------------------------------------------------
Service ID Zikula\AdminModule\Twig\Extension\AdminExtension
Class Zikula\AdminModule\Twig\Extension\AdminExtension
Tags twig.extension
Public no
Synthetic no
Lazy no
Shared yes
Abstract no
Autowired yes
Autoconfigured yes
---------------- --------------------------------------------------
! [NOTE] The "Zikula\AdminModule\Twig\Extension\AdminExtension" service or alias has been removed or inlined when the
! container was compiled.
Это ясно показывает, что служба не только правильно подключена автоматически, но и правильно помечена.
Если я это сделаю, bin/console debug:twig
ни одно из пользовательских расширений не будет указано (вверху с функциями, фильтрами и т. Д.). Я даже попытался пройти через , и я совершенно уверен, что вызываемые объекты включены туда.
Вы хоть представляете, в чем проблема или как я могу ее устранить?
lint:twig
, как это сделано здесь: travis-ci.org/zikula/core/jobs/623444067#L860 - person craigh   schedule 11.12.2019Twig/Environment
класс / службу (здесь: github.com/zikula/core/blob/). Итак, если я исключу определение услуги украшения, тогда все расширения будут добавлены, как и ожидалось. Так что, видимо, мы неправильно оформляем. Как правильно украсить? - person craigh   schedule 12.12.2019decorate
, а сделайтеTwig\Environment: [yourclass]
и[yourclass]: ... alias: twig
, что, надеюсь, сработает. Я твердо верю, чтоdecorates
подразумевает семантику, которую ваш класс не выполняет (в частности: он не реализует шаблон декоратора). Внимательно прочтите: symfony.com/doc/current/service_container/ - person Jakumi   schedule 12.12.2019