2016-07-26 51 views
2

我在樹枝模板中有一些變量,所以想想爲它使用全局作用域。如何在Symfony中的config中調用服務容器中的方法?

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

服務陽明我:

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()也不起作用。

可能嗎?或者它不好的想法和不好的做法?

感謝

+0

也許我必須使用另一個服務,fe wf.autoload.getA和它的調用方法呢? – Salavat

+2

最好創建樹枝擴展來定義這個功能(getA,getB) – DOZ

+1

你想訪問控制器中的樹枝全局變量嗎? –

回答

3

如果木屐()和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" 
+0

這就是我需要的!謝謝! – Salavat

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() }} 
+0

謝謝,但它又是我想要的東西。 – Salavat

相關問題