0

我确实在我的 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

我的 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。如何?

谢谢!!!

4

2 回答 2

0

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

这你就可以调用 {{ yourFunction }}

这很简单。

于 2017-12-08T17:52:45.790 回答
0

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

以下是一些关于设置新功能并将其注册到容器服务中的精彩文档:

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

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

以下是 Twig 的一些文档:

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

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

祝你好运,编码愉快!

于 2017-12-09T01:04:51.600 回答