2012-11-07 24 views
21

W moim szablonie chcę wyprowadzić strefę czasową serwera.Używanie niestandardowej funkcji w gałązce

Mój szablon ma coś podobnego

{{ getservertimezone }} 

następnie w config services.yml dla tej wiązce mam

my.twig.extension: 
    class: My\WebsiteBundle\Extensions\Twig\SomeTemplateHelper 
    tags: 
      - { name: twig.extension } 

A moja SomeTemplateHelper wygląda

namespace My\WebsiteBundle\Extensions\Twig; 

class SomeTemplateHelper extends \Twig_Extension 
{ 

    public function getFilters() 
    { 
     return array(
      'getservertimezone' => new \Twig_Filter_Method($this, 'getServerTimeZone'), 
     ); 
    } 


    public function getServerTimeZone() 
    { 
     if (date_default_timezone_get()) { 
      return date_default_timezone_get(); 
     } else if (ini_get('date.timezone')) { 
      return ini_get('date.timezone'); 
     } else { 
      return false; 
     } 
    } 

    public function getName() 
    { 
     return 'some_helper'; 
    } 

} 

ale mogę nie nazwać tej metody, chyba że jest używana jak filtr {{ someval | getservertimezone }}, czy istnieje sposób o po prostu zadzwoń do straigh {{ getservertimezone() }}?

Odpowiedz

36

Zastosowanie getFunctions() zamiast getFilters()

public function getFunctions() 
{ 
    return array(
     new \Twig_SimpleFunction('server_time_zone', array($this, 'getServerTimeZone')), 
    ); 
} 

filtrów Twig są używane do filtrowania jakąś wartość.

{{ "some value" | filter_name_here }} 

Btw, możesz zdefiniować filtry i funkcje w tej samej klasie.

+1

Twig_Function_Method jest przestarzałe, użyj zamiast tego Twig_SimpleFunction. Otwieram problem w dokumencie symfony https://github.com/symfony/symfony-docs/issues/3275 – gagarine

+0

@gagarine poprawiono –

6

Zamiast getFilters, należy zastąpić getFunctions i użyć Twig_Function_Method zamiast Twig_Filter_Method.

5

W nowszych wersjach Gałązka powinien być korzystających Twig_SimpleFunction zamiast Twig_Function_Method i Twig_SimpleFilter zamiast Twig_Filter_Method, ponieważ Gałązka _ * _ Metoda są przestarzałe (używam Gałązka v. 1.24.0 wraz z Symfony 2.8.2)

Powiązane problemy