模板中的symfony3.4服务容器

时间:2017-12-04 13:25:08

标签: php symfony service containers symfony-3.4

我确实在MainBundle / MainFunctions /中定义了一个服务,在Controller中我可以调用该服务。如何在模板中获取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

my 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。怎么样?

感谢!!!

2 个答案:

答案 0 :(得分:0)

如果您在模板中需要一些智能,我建议您使用twig扩展名:https://symfony.com/doc/current/templating/twig_extension.html

您可以拨打{{yourFunction}}

这很简单。

答案 1 :(得分:0)

MatMouth的答案是从树枝模板与您的服务进行交互的最佳方式。您可以为模板中需要访问的每个方法创建函数。试图将您的对象添加为twig变量并不是一个好习惯,除非它只是像您将与Doctrine实体一样使用的基本getter。

以下是有关设置新功能并在容器服务中注册的一些很好的文档:

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

您还可以注册过滤器而不是功能。两者之间的区别在于函数语法someFunction(someVar)和过滤器someVar|someFilter。如果需要向函数或过滤器添加其他参数,只需将参数添加到callable。

以下是Twig的一些文档:

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

你可以做一些很酷的事情,比如让它保持HTML安全,注入树枝环境等等......

祝你好运,编码愉快!