我在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()
的方法也不起作用。
有可能吗?还是坏主意和不好的做法?
由于
答案 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() }}