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

xan*_*ngr 6 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...
    }
Run Code Online (Sandbox Code Playgroud)

结果: FatalErrorException: Error: Call to undefined function myCustomFilterFunction()

原因:因为,Twig试图找到这个函数,但它在一个类中.如果我这次将它移到课外,我会面对命名空间.因为它是命名空间的.

研究:我挖掘代码.Twig做同样的事情.他们在课堂外编写过滤器和函数.但由于命名空间,我无法做到这一点.如果可能,我想通过使用适当的解决方案来做到这一点.如果失败了; 我将带来最新的解决方案,即创建另一个没有命名空间的php文件,并将其包含在项目中......

-

我怎么能克服它?Twig Filter已被弃用,我们必须使用SimpleFilter方法.但我无法完成它.

ric*_*age 8

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

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

当使用过滤器时,它将使用您的对象的方法.

请参阅Twig文档中的示例.