Search code examples
phpsymfonykerneltwigtwig-extension

Using locateResource inside Twig Extension


I wish to use the following inside of a Twig Extension

$kernel = $container->getService('kernel');
$path = $kernel->locateResource('@AdmeDemoBundle/path/to/file/Foo.png');

but this involved passing in the Kernel, which is bad. Plus I could not get it to work anyway when trying this method.

How can I access a resources path within a Twig Extension?

The Extension is already a Service. I can use Assetic to give me the URL, but I really want the path.


Solution

  • I had a similar need: i needed to pass to the filter the url of an image to display it in a for loop and build a string.

    I passed the URL directly to the filter in this way:

    {%  image '@AppBundle/Resources/public/images/my_asset.png' %}
        {% set resolved_asset_url = asset_url %}
    {% endimage %}
    
    {{ my_var|filter_name(resolved_asset_url)|raw(html) }}
    

    In this way the Twig template resolve the correct resource's URL, sets it as a variable, and then I pass it to the filter from inside the template itself, without having to deal with kernel or something else.