我有一个基于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方法.但我无法完成它.
您可以将基于数组的可调用作为第二个参数传递给Twig_SimpleFilter构造函数 - 在您的情况下,使用如下数组:
public function getFilters() {
return array(
'shortKey' => new Twig_SimpleFilter('shortKey', array($this, 'myCustomFilterFunction'))
);
}
Run Code Online (Sandbox Code Playgroud)
当使用过滤器时,它将使用您的对象的方法.
请参阅Twig文档中的示例.
| 归档时间: |
|
| 查看次数: |
2679 次 |
| 最近记录: |