我不能在Twig_Extension类中使用Twig_SimpleFilter的内部函数

时间:2013-02-04 12:51:56

标签: php symfony twig

我有一个基于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方法。但我无法完成它。

1 个答案:

答案 0 :(得分:8)

您可以将基于数组的callable作为第二个参数传递给Twig_SimpleFilter构造函数 - 在您的情况下,使用如下数组:

public function getFilters() {
    return array(
        'shortKey'  => new Twig_SimpleFilter('shortKey', array($this, 'myCustomFilterFunction'))
    );
}

将在使用过滤器时使用对象的方法。

请参阅Twig documentation中的示例。