6

Symfony 2 を使用した小枝ベースのプロジェクトがあります。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: Error: Call to undefined function myCustomFilterFunction()

理由: Twig はこの関数を見つけようとしていますが、クラス内にあるためです。今度はクラスの外に移動すると、名前空間に直面します。名前空間が設定されているためです。

調査: コードを掘り下げます。小枝も同じことをします。クラスの外でフィルタと関数を記述します。しかし、名前空間のために私はそれを行うことができません。可能であれば、適切なソリューションを使用してそれを行いたいと考えています。失敗した場合; 名前空間なしで別のphpファイルを作成し、それをプロジェクトに含める最新のソリューションが付属しています...

--

どうすれば乗り越えられますか?Twig Filter は廃止されたため、SimpleFilter メソッドを使用する必要があります。しかし、私はそれを成し遂げることができませんでした。

4

1 に答える 1

8

配列ベースの callable をTwig_SimpleFilterコンストラクターの 2 番目のパラメーターとして渡すことができます。この場合、次のように配列を使用します。

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

フィルターが使用されるときにオブジェクトのメソッドを使用します。

Twig ドキュメントの例を参照してください。

于 2013-02-04T12:58:48.380 に答える