2013-02-04 17 views
6

我有一個基於Symfony 2的基於樹枝的項目。由於Symfony 2的本質,使用了命名空間。因此,我無法在名稱空間之外提供全局函數。我不能在Twig_Extension類中使用Twig_SimpleFilter的內部函數

這是我的嫩枝擴展類:

<?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做同樣的事情。他們在課堂外編寫過濾器和函數。但由於命名空間,我無法做到這一點。如果可能,我想通過使用適當的解決方案來做到這一點。如果失敗;我會帶着它創建無命名另一個PHP文件,它包含該項目的最新解決方案...

-

我怎麼熬過來的? Twig過濾器已被棄用,我們必須使用SimpleFilter方法。但我無法完成。

回答

8

可以傳遞一個陣列爲基礎的可調用作爲第二個參數到Twig_SimpleFilter構造 - 在你的情況下,使用像這樣的數組:

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

將使用您的對象的方法中使用的過濾器時。

請參閱Twig documentation中的示例。

+1

我怎麼錯過了「超載」章節的文件:(。謝謝你叫醒我! – xangr

相關問題