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