symfony2传递服务以形成主题

时间:2014-12-16 19:09:58

标签: forms symfony service themes

好日落,

我只需要从form_theme访问服务,例如myService.myFunction(param1, param2),其中myService是保存服务本身的变量。我需要访问的参数是block('form_label'),它为我提供 for html属性。

我尝试使用Request方法通过$request->attributes->set()访问myService。这有效,但不是100%,因为我需要myService中的entityManager,并且它被设置为null。所以我猜这不是正确的方法。

我想尝试使用formExtensions,但是对于许多formTypes(大约10个)我需要这个,并且扩展只能使用一个FormType ...

是否有更好的解决方案可以从我的模板访问服务(使用实体管理器)?

1 个答案:

答案 0 :(得分:2)

通过控制器操作传递它:

$service = $this->get('MY_SERVICE');

...

return $this->render(..., ['service' => $service]);

或使用TwigExtension(不带控制器):

private $myService;

public function __construct(MyService $myService)
{
    $this->myService = $myService;
}

public function getFunctions()
{
    return [
        new \Twig_SimpleFunction('my_service', [$this, 'getMyService']);
    ];
}

public function getMyService()
{
    return $this->myService;
}

并在以下模板中全局使用它:

{{ my_service().myDesiredMethod() }}