Skip to content
Advertisement

Custom Twig filter from bundle: Unable to load the runtime

I’ve a small twig custom filter in my project created following https://symfony.com/doc/current/templating/twig_extension.html . As long as it sits in src/Twig, it works as expected.

Now I’m trying to move it to a custom bundle (vendor/turbolabit/tli-base-bundle/src/Twig/) to make it reusable.

I moved the two files:

<?php
namespace TurboLabItTLIBaseBundleTwig;

use AppTwigAppRuntime;
use TwigExtensionAbstractExtension;
use TwigTwigFilter;

class TrimmerExtension extends AbstractExtension
{
    public function getFilters()
    {
        return [
            new TwigFilter('trimmer', [TrimmerExtensionRuntime::class, 'trim']),
        ];
    }
}
<?php
namespace TurboLabItTLIBaseBundleTwig;

use TwigExtensionRuntimeExtensionInterface;


class TrimmerExtensionRuntime implements RuntimeExtensionInterface
{
    public function trim(string $value): string
    {
        return trim($value);
    }
}

I tagged it in services.yaml:

TurboLabItTLIBaseBundleTwigTrimmerExtension:
    tags: [twig.runtime]

(I also tried as tags: [twig.extension], even if it would be incorrect because this is a lazy-loaded filter, but it makes no difference)

I see it in symfony console debug:twig --filter=trimmer:

Filters
-------

 * trimmer

But when I try to use it (like I did before):

 <div>{% apply trimmer %}      this must be trimmed              {% endapply %}</div>

it explodes:

Unable to load the “TurboLabItTLIBaseBundleTwigTrimmerExtensionRuntime” runtime.

What am I missing?

Advertisement

Answer

It is difficult to understand exactly how this should be configured from the docs. The way I understand it the TrimmerExtension should be tagged extension and/or the TrimmerExtensionRuntime should get the runtime tag.

TurboLabItTLIBaseBundleTwigTrimmerExtension:
    tags: [twig.extension]

TurboLabItTLIBaseBundleTwigTrimmerExtensionRuntime:
    tags: [twig.runtime]
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement