gpt4 book ai didi

php - 我不能在 Twig_Extension 类中将内部函数与 Twig_SimpleFilter 一起使用

转载 作者:可可西里 更新时间:2023-11-01 13:18:00 26 4
gpt4 key购买 nike

我有一个使用 Symfony 2 的基于 Twig 的项目。由于 Symfony 2 的特性,使用了命名空间。因此,我无法在命名空间之外提供全局函数。

这是我的 Twig 扩展:

<?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:错误:调用未定义函数 myCustomFilterFunction()

为什么:因为,Twig 试图找到这个函数,但它在一个类中。如果这次我将它移到类之外,我将面临命名空间。因为它是命名空间的。

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

--

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

最佳答案

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

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

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

请参阅 Twig documentation 中的示例.

关于php - 我不能在 Twig_Extension 类中将内部函数与 Twig_SimpleFilter 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14687191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com