Call Twig truncate filter inside a controller
php, symfony, twig
Solution
Probably there is a shorter way, but the following worked for me:
$filters = $this->get('twig.extension.text')->getFilters();
$callable = $filters['truncate']->getCallable();
$truncated = $callable($this->get('twig'), $str));
For Twig Extensions > 1.3 you can use this
$filters = $this->get('twig.extension.text')->getFilters();
$key = array_search('truncate', array_map(function(TwigFilter $filter) { return $filter->getName(); }, $filters), true);
$callable = $filters[$key]->getCallable();
$truncated = $callable($this->get('twig'), $str));
Problem
I need to use twig truncate filter inside a controller. I do not use a Twig template because my controller only return a json object. From the Twig Text extension source, I saw that the filter function is `twig_truncate_filter`, so I tried to get the extension as a service and call the filter function it in my controller : ``` $something = "a long character string that need to be truncated"; $twigText = $this->get("twig.extension.text"); $twig = $this->get("twig"); $truncatedValue = $twigText->twig_truncate_filter($twig,$something) ``` It give me a Fatal error: `Call to undefined method Twig_Extensions_Extension_Text::twig_truncate_filter()`. How can I use the filter feature directly in my controller ?