Создание пользовательской функции, расширения в twig

Twig позволяет создавать расширения в виде функций и фильтров. Файл ложим по адресу \src\AppBundle\Twig\Extensions\AppTwigExtension.php Пример использования:

// \src\AppBundle\Twig\Extensions\AppTwigExtension.php

namespace AppBundle\Twig\Extensions;

class AppTwigExtension extends \Twig_Extension
{

	public function getName(){
        return 'app_twig_extension';
    }
	
	public function getFilters(){
        return [
            new \Twig_SimpleFilter('filter_parseToJS', [$this, 'filter_parseToJS'], ['is_safe' => ['all']])
        ];
    }

	public function filter_parseToJS($data){
		if(!$data){
			$data = [];
		}
		$str = json_encode($data);
		$str = addcslashes($str, "'");
		$str = addcslashes($str, '"');
		echo $str;
	}
	
   
	public function getFunctions(){
        return array(
            new \Twig_SimpleFunction('function_parseToJS', [$this, 'function_parseToJS'], ['is_safe' => ['html']]),
        );
    }
	
	public function function_parseToJS($data){
		if(!$data){
			$data = [];
		}
		$str = json_encode($data);
		$str = addcslashes($str, "'");
		$str = addcslashes($str, '"');
		echo $str;
	}
	
}

где
getName() - служебная функция для передачи названия расширения
getFilters() - служебная функция для передачи списка расширений фильтров
getFunctions() - служебная функция для передачи списка расширений функций

Вызов:

p_obj.diler_map_array_str='{{ diler_map_array | filter_parseToJS  }}';
p_obj.diler_map_array_str='{{ function_parseToJS(diler_map_array)  }}';

Подробнее:
Extending Twig - [official]
How to write a custom Twig Extension - [official]
Список доступных twig функций и фильтров можно посмотреть по адресу: \vendor\twig\twig\doc\filters