Using a custom function in twig

后端 未结 4 1890
失恋的感觉
失恋的感觉 2021-02-02 10:21

In my template I want to output the server timezone.

My template has something like

{{ getservertimezone }}

Then in the services.yml co

相关标签:
4条回答
  • 2021-02-02 10:29

    Symfony ^2.6 - twig ^1.38

    See example below


    AppExtension.php

    namespace Your/NameSpace;
    
    class AppExtension extends \Twig_Extension {
    
        public function getFilters() 
        {
            return array(
                new \Twig_SimpleFilter('cdn_asset_filter', array($this, 'cdn_asset_filter')),
            );
        }
    
        public function getFunctions()
        {
            return array(
                new \Twig\TwigFunction('cdn_asset_function', array($this, 'cdn_asset_function')),
            );
        }
    
    
        public function cdn_asset_filter($path) 
        {
            return "https://cdn.example.com/$path";
        }
    
    
        public function cdn_asset_function($path) 
        {
            return "https://cdn.example.com/$path";
        }
    }
    

    view.html.twig

    // Filter
    
    <img src="{{ 'path/to/image.png'|cdn_asset_filter }}">
    
    // result : <img src="https://cdn.example.com/path/to/image.png">
    
    
    // Function
    
    <img src="{{ cdn_asset_function('path/to/image.png') }}">
    
    // result : <img src="https://cdn.example.com/path/to/image.png">
    

    app/config/services.yml

    services:
        my_global_filters_and_functions:
            class: Your/NameSpace/AppExtension
            tags:
                - { name: twig.extension }
    

    This is how i used custom functions in Twig in one my old projects, i don't know if it's a best practice, but it worked for me.


    Resources : Twig Documentation - Extending Twig

    0 讨论(0)
  • 2021-02-02 10:47

    Use getFunctions() instead of getFilters()

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

    Twig filters are used to filter some value.

    {{ "some value" | filter_name_here }}
    

    Btw, you can define both filters and functions in the same class.

    0 讨论(0)
  • 2021-02-02 10:51

    In the newer versions of Twig he should be using Twig_SimpleFunction instead of Twig_Function_Method and Twig_SimpleFilter instead of Twig_Filter_Method, since Twig_*_Method are deprecated (I am using Twig v. 1.24.0 along with Symfony 2.8.2)

    0 讨论(0)
  • 2021-02-02 10:55

    Instead of getFilters, override getFunctions and use Twig_Function_Method instead of Twig_Filter_Method.

    0 讨论(0)
提交回复
热议问题