我确实在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。怎么样?
感谢!!!
答案 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安全,注入树枝环境等等......
祝你好运,编码愉快!