2013-02-04 8 views
6

私はSymfony 2を使用したtwigベースのプロジェクトを持っています.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()

なぜクラス。今度はクラスの外に移動すると、私は名前空間に直面します。名前空間であるためです。

研究: 私はコードをdiggします。小枝は同じことをする。クラス外でフィルタや関数を記述します。しかし、名前空間のために私はそれを行うことはできません。可能であれば、私は適切なソリューションを使用してそれを行うwanto。それが失敗した場合。私はそれを乗り越えることができますどのように

- 私は

...名前空間せずに別のphpファイルを作成している最新のソリューションに付属し、プロジェクトに含まれていますか? Twig Filterは非推奨で、SimpleFilterメソッドを使用する必要があります。しかし、私はそれを完了できませんでした。

答えて

8

あなたが渡すことができ、アレイベースのTwig_SimpleFilterコンストラクタの2番目のパラメータとして呼び出し可能 - あなたのケースでは、そのような配列を使用します。フィルタを使用する場合は、オブジェクトのメソッドを使用します

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

Twig documentationの例を参照してください。

+1

どのように私はドキュメントの "オーバーロード"の章を見逃しましたか? – xangr

関連する問題