2016-04-23 94 views
1

我需要知道如何從另一個過濾器獲取過濾器,我有下一個代碼。也許我必須使用Twig_Enviroment,但我不知道如何。在symfony2中的另一個過濾器樹枝內使用過濾器

的理念是:

  • 過濾器上的轉換在字的數目。這個做完了。
  • 過濾器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] 
      ) 
     ]; 
    } 
} 
相關問題