如何在Symfony的config中调用服务容器的方法?

时间:2016-07-26 13:12:48

标签: php symfony

我在twig-templates中有一些变量,所以请考虑使用全局范围。

config.yml
twig:
 globals:
  varA: "@wf.autoload.getA"
  varB: "@wf.autoload.getB"

service yml 我有:

services.yml
 wf.autoload:
  class: Scope\WfBundle\WfAutoloadService
  arguments: ["@doctrine.orm.entity_manager"]

WfAutoloadService 类具有获取变量的公共函数

    class WfAutloadService {
    ...
    public function getA(){
    return ...;
    }

    public function getB(){
    return ...
    }
    ...
    }

我的想法不起作用。 @=service(wf.autoload).getA()的方法也不起作用。

有可能吗?还是坏主意和不好的做法?

由于

2 个答案:

答案 0 :(得分:4)

如果getA()和getB()返回对象,则可以在配置服务时使用工厂:

services:
    wf.autoload:
        class: Scope\WfBundle\WfAutoloadService
        arguments: ["@doctrine.orm.entity_manager"]
    wf.autoload.getA:
        class:   A
        factory: ["@wf.autoload", getA]

设置全局树枝:

twig:
 globals:
  varA: "@wf.autoload.getA"

答案 1 :(得分:1)

我想在许多树枝模板中使用此功能,您可以创建树枝延伸

例如:

class MyExtensions extends \Twig_Extension
{
    public function getFunctions()
    {
            return array(
                'getA' => new \Twig_Function_Method($this, 'getA', array('is_safe' => array('html')))
            );
    }

    public function getA() // you can if you want pass parameters
    {
       //your code

       return ...
    }
}

将其声明为服务:

myextensions.twig_extension:
      class: Project\YourBundle\Twig\MyExtensions
      public: false
      tags:
          - { name: twig.extension }

并在你的树枝模板中调用它:

{{ getA() }}