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 ?

Original source