Php 如何在不使用静态方法的情况下创建自定义细枝函数类?
我可以像这样为我的项目创建一个细枝扩展Php 如何在不使用静态方法的情况下创建自定义细枝函数类?,php,twig,templating-engine,Php,Twig,Templating Engine,我可以像这样为我的项目创建一个细枝扩展 class Functions extends Twig_Extension{ public function getName(){return 'foobar';} public function getFunctions() { return array( 'loremipsum' => new \Twig_SimpleFunction('asset', 'Functions::lorem
class Functions extends Twig_Extension{
public function getName(){return 'foobar';}
public function getFunctions() {
return array(
'loremipsum' => new \Twig_SimpleFunction('asset', 'Functions::loremipsum')
);
public static function loremipsum($foo) {
return $foo;
}
}
这是可行的,但我想使用构造函数在一些函数中注入一些我需要的数据
在Twig\u SimpleFunction
中简单地使用'asset'
将导致PHP尝试执行函数loremipsum()
查看扩展Twig_函数的所有不同类,了解指定模板函数的所有不同方法
对于较新的Twig_SimpleFunction
,似乎可以将任何类型的作为第二个参数传递给构造函数:
new Twig_SimpleFunction('foo', array($this, 'bar'))
从twig版本1.23.1及更高版本更新如下:
class LogoExtension extends \Twig_Extension
{
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('logo', array($this, 'logo'), array('is_safe' => array('html'))),
);
}
public function logo()
{
return 'result';
}
/**
* {@inheritdoc}
*/
public function getName()
{
return 'logo';
}
}
当然,您可以在services.yml
config文件中将此扩展类作为细枝扩展添加
services:
company.twig.extension.logo:
class: Acme\DemoBundle\Twig\Extension\LogoExtension
tags:
- { name: twig.extension}
遗憾的是,
Twig\u Function\u方法
(以及所有Twig\u Function.*
类)都被弃用了。它将在2.0中删除
services:
company.twig.extension.logo:
class: Acme\DemoBundle\Twig\Extension\LogoExtension
tags:
- { name: twig.extension}