2012-11-07 3 views
21

내 템플릿에 서버 시간대를 출력하고 싶습니다.나뭇 가지에 사용자 정의 함수 사용

내 템플릿 내가

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

이 해당 번들에 대한 services.yml의 설정에서 다음

{{ getservertimezone }} 

같은 것을 가지고 그리고 내 SomeTemplateHelper

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'; 
    } 

} 

하지만 내가 할 수있는 것 같습니다 필터처럼 사용하지 않는 한이 메서드를 호출하지 마십시오. {{ someval | getservertimezone }}, 방법은 있습니까? 그냥 스트레치 {{ getservertimezone() }} 전화를합니까?

답변

36

사용 getFunctions() 어떤 값을 필터링하는 데 사용됩니다.

{{ "some value" | filter_name_here }} 

btw와 같은 클래스에서 필터와 함수를 모두 정의 할 수 있습니다. 그는 대신 Twig_Function_Method 대신 Twig_Filter_Method의 Twig_SimpleFilter의 Twig_SimpleFunction를 사용한다 나뭇 가지의 새로운 버전에서

+1

Twig_Function_Method는 대신 Twig_SimpleFunction을 사용합니다. symfony doc https://github.com/symfony/symfony-docs/issues/3275에서 문제를 엽니 다. – gagarine

+0

@ gagarine fixed –

6

getFilters 대신 getFunctions을 무시하고 Twig_Filter_Method 대신 Twig_Function_Method을 사용하십시오. 대신 getFilters()

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

나뭇 가지 필터의

5

, 나뭇 이후 _ * _ 방법은 (내가 나뭇 가지 V를 사용하고 있습니다. 1.24.0을 함께 심포니 2.8.2로)되지 않습니다

관련 문제