Предоставить услугу Symfony 5 как twig global - PullRequest
0 голосов
/ 10 июля 2020

Я использую сервис как глобальную переменную twig. В конструкторе сервиса я установил значение свойства по умолчанию $title. Первоначально он работает .... Twig отображает значение свойства с помощью команды {{ service.getTitle() }} в файле шаблона. Но после обновления свойства службы конструктором контроллеров и рендеринга представления значение не обновляется на экране. Цель - установить глобальную переменную twig контроллерами для отображения во всех представлениях. Как это сделать?

  • twig.yaml

    twig:
        globals:
            pageMap: "@Base.PageMap"
    
  • services.yaml

    services:
        Base.PageMap:
            class : App\Bundle\Base\Services\PageMap
            public: true
    
  • контроллер

    public function __construct(PageMap $pageMap)
    {
       $pageMap->setTitle('Registration listing');
    }
    
  • шаблон веточки:

    <div class="title">{{ pageMap.getTitle() }}</div>
    

1 Ответ

1 голос
/ 10 июля 2020

Глобальные объекты Twig настраиваются во время инициализации и компилируются / кэшируются на время выполнения.

Если вы хотите обновлять и иметь возможность динамически вызывать вещи, вы должны создать RuntimeExtension (см. Документацию здесь: https://symfony.com/doc/current/templating/twig_extension.html#creating -lazy-loaded-twig-extensions )

Вызов его из вашего шаблона будет немного дороже (но правильнее!)

...