2016-04-23 6 views
1

私は別のフィルターからフィルターを得る方法を知る必要があります。次のコードがあります。たぶん私はTwig_Enviromentを使わなければならないかもしれませんが、どうしてでしょうか。symfony2の別のフィルターの小枝の中でフィルターを使用する

考え方は:

  • フィルタAは、単語内の数値を変換します。これは完了です。
  • フィルタBはフィルタAを使用して通貨値を単語に変換する必要があります。

    クラスCurrencyToWordsExtensionは\ Twig_Extension { パブリック関数getFilters() { 戻り配列( 新しい\ Twig_SimpleFilter( 'currencyToWords'、配列($この、 'currencyToWordsFilter')) )を拡張します。

    function currencyToWordsFilter($number) 
    { 
        // $toWords = $env->getFilter('toWords'); 
        $number = number_format((float)$number, 2); 
        $pesos = floor($number); 
        $centavos = ($number - $pesos) * 100; 
    
        return $pesos .' con '. $centavos; 
    
    } 
    
    public function getName() 
    { 
        return 'currencyToWords'; 
    } 
    

    }}

答えて

1

多くの可能性があります:クラスを分離するためのフィルタから

  • 移動アウトロジックが。フィルタは複雑なロジックの軽いラッパーである必要があります。
  • 両方のフィルタを同じTwig Extensionクラスに移動します(単純で、両方が自分のコードである場合)。次に、内部クラスメソッドを呼び出すことができます。 services.ymlで小枝拡張クラスのコンストラクタへ
  • を注入依存関係

services.yml

services: 
    twig.currency_extension: 
     class: AppBundle\Twig\CurrencyExtension 
     public: false 
     arguments: [ '@twig.words_extension' ] 
     tags: 
      - { name: twig.extension } 

CurrencyExtension.php

class CurreycExtension extends Twig_Extension 
{ 
    /** @var WordsExtension */ 
    private $wordsExtension; 

    public __construct(WordsExtension $wordsExtension) 
    { 
     $this->wordsExtension = $wordsExtension 
    } 

    //... 
} 

はまたに応じてフィルターに名前を付けてみてください小枝の慣習:snake_case、短い。

2
class SomeExtension extends \Twig_Extension { 
    function getName() { 
     return 'some_extension'; 
    } 

    function getFilters() { 
     return [ 
      new \Twig_SimpleFilter(
       'filterOne', 
       function(\Twig_Environment $env, $input) { 
        $output = dosmth($input); 
        $filter2Func = $env->getFilter('otherFiltersName')->getCallable(); 
        $output = call_user_func($filter2Func, $output); 
        return $output; 
       }, 
       ['needs_environment' => true] 
      ) 
     ]; 
    } 
} 
関連する問題