我有一个基于twig的项目与Symfony 2.由于Symfony 2的性质,使用了命名空间。因此,我无法在命名空间之外提供全局函数。
这是我的Twig Extension 类:
<?php
namespace Web\MailBundle\Twig;
use Twig_Extension, Twig_SimpleFilter;
class Twig extends Twig_Extension
{
public function getName()
{
return 'twig_extension';
}
public function getFilters() {
return array(
'shortKey' => new Twig_SimpleFilter('shortKey', 'myCustomFilterFunction')
);
}
public function myCustomFilterFunction() {
//code here...
}
结果:
FatalErrorException: Error: Call to undefined function myCustomFilterFunction()
为什么: 因为,Twig试图找到这个函数,但它在一个类中。如果我这次将它移到课外,我会面对命名空间。因为它是命名空间。
研究: 我挖掘代码。 Twig做同样的事情。他们在课堂外编写过滤器和函数。但由于命名空间,我无法做到这一点。如果可能,我想通过使用适当的解决方案来做到这一点。如果失败了;我将带来最新的解决方案,即创建另一个没有命名空间的php文件并将其包含在项目中......
-
我怎么能克服它? Twig Filter已被弃用,我们必须使用SimpleFilter方法。但我无法完成它。
答案 0 :(得分:8)
您可以将基于数组的callable作为第二个参数传递给Twig_SimpleFilter
构造函数 - 在您的情况下,使用如下数组:
public function getFilters() {
return array(
'shortKey' => new Twig_SimpleFilter('shortKey', array($this, 'myCustomFilterFunction'))
);
}
将在使用过滤器时使用对象的方法。
请参阅Twig documentation中的示例。