Сервисный контейнер symfony3.4 в шаблоне

Я определил службу в моем MainBundle / MainFunctions /, а в контроллере я могу вызвать эту службу. Как теперь получить контейнер службы в SYMFONY 3.4 в шаблоне? Прочтите документы, что это больше не общедоступно.

#view/template.html.php
<?php $shop_id = $this->container->get('main_functions')->getSessionShopId(); ?>

Мой config.yml

imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: services.yml }
- { resource: "@FrontendMainBundle/Resources/config/services.yml

мой FrontendMainBundle / Resources / config / services.yml

services:
    _defaults:
        public: true
    frontend_locale.locale_listener:
        class: Frontend\MainBundle\EventListener\LocaleListener
        arguments: ["%kernel.default_locale%"]
        tags:
            - { name: kernel.event_subscriber }
    main_functions:
        public: true
        class: "%main_functions_class.class%"
        arguments: ['@translator', '@doctrine.orm.entity_manager'....

Я читал документы, что это больше не публично. Но я не могу перейти к main_functions в шаблоне. Как?

БЛАГОДАРНОСТЬ!!!

На мой взгляд, использование локатора сервисов в шаблонах — плохая практика. Вместо этого вставляйте сервис main_functions в свой контроллер и передавайте в шаблоны только необходимые переменные.   —  person craphunter    schedule 04.12.2017

См. также:  Почему Symfony Guard запускает событие security.interactive_login при каждом запросе?
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. craphunter

    если вам нужен интеллект в шаблоне, я советую вам использовать расширение twig: https://symfony.com/doc/current/templating/twig_extension.html

    это вы сможете позвонить {{yourFunction}}

    это довольно просто.

  2. craphunter

    Ответ от MatMouth — лучший способ взаимодействия с вашим сервисом из шаблона веточки. Вы можете создавать функции для каждого метода, к которому вам нужен доступ в шаблоне. Попытка добавить ваш объект как переменную ветки не является хорошей практикой, если это не просто базовые геттеры, которые вы бы использовали, например, с объектами Doctrine.

    Вот отличная документация по настройке новой функции и ее регистрации в контейнерной службе:

    https://symfony.com/doc/3.2/templating/twig_extension.html

    Вы также можете зарегистрировать фильтр вместо функции. Разница между ними — синтаксис функции someFunction(someVar) и фильтр someVar|someFilter. Если вам нужно добавить дополнительные аргументы к вашей функции или фильтру, просто добавьте аргументы в свой вызываемый объект.

    Вот некоторая документация от Twig:

    https://twig.symfony.com/doc/2.x/advanced.html

    Вы можете делать классные вещи, например, делать HTML безопасным, внедрять среду twig и т. Д.

    Удачи и удачного кодирования!

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: