2012-11-07 33 views
21

Trong mẫu của tôi, tôi muốn xuất ra múi giờ của máy chủ.Sử dụng chức năng tùy chỉnh theo dạng cành

mẫu của tôi có một cái gì đó giống như

{{ getservertimezone }} 

Sau đó, trong cấu hình services.yml cho bó mà tôi có

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

SomeTemplateHelper của tôi trông giống như

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

} 

Nhưng tôi có thể không gọi phương thức này trừ khi nó được sử dụng như một bộ lọc {{ someval | getservertimezone }}, có cách nào t o chỉ cần thực hiện một cuộc gọi đến số {{ getservertimezone() }}?

Trả lời

36

Sử dụng getFunctions() thay vì getFilters()

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

lọc cành được sử dụng để lọc một số giá trị.

{{ "some value" | filter_name_here }} 

Btw, bạn có thể xác định cả bộ lọc và chức năng trong cùng một lớp.

+1

Thay vào đó, Twig_Function_Method không được sử dụng Twig_SimpleFunction. Tôi mở một vấn đề trên tài liệu symfony https://github.com/symfony/symfony-docs/issues/3275 – gagarine

+0

@gagarine cố định –

6

Thay vì getFilters, ghi đè getFunctions và sử dụng Twig_Function_Method thay vì Twig_Filter_Method.

5

Trong các phiên bản mới hơn của cành anh nên sử dụng Twig_SimpleFunction thay vì Twig_Function_Method và Twig_SimpleFilter thay vì Twig_Filter_Method, vì cành _ * _ Phương pháp đang bị phản đối (Tôi đang sử dụng cành v. 1.24.0 cùng với Symfony 2.8.2)

Các vấn đề liên quan