来自捆绑包的自定义 Twig 过滤器:无法加载运行时
Custom Twig filter from bundle: Unable to load the runtime
我在 https://symfony.com/doc/current/templating/twig_extension.html 之后创建的项目中有一个小的 twig 自定义过滤器。只要它位于 src/Twig
,它就会按预期工作。
现在我正尝试将其移至自定义包 (vendor/turbolabit/tli-base-bundle/src/Twig/
) 以使其可重复使用。
我移动了两个文件:
<?php
namespace TurboLabIt\TLIBaseBundle\Twig;
use App\Twig\AppRuntime;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
class TrimmerExtension extends AbstractExtension
{
public function getFilters()
{
return [
new TwigFilter('trimmer', [TrimmerExtensionRuntime::class, 'trim']),
];
}
}
<?php
namespace TurboLabIt\TLIBaseBundle\Twig;
use Twig\Extension\RuntimeExtensionInterface;
class TrimmerExtensionRuntime implements RuntimeExtensionInterface
{
public function trim(string $value): string
{
return trim($value);
}
}
我在 services.yaml
中标记了它:
TurboLabIt\TLIBaseBundle\Twig\TrimmerExtension:
tags: [twig.runtime]
(我也试过 tags: [twig.extension]
,即使它是不正确的,因为这是一个延迟加载的过滤器,但它没有区别)
我在symfony console debug:twig --filter=trimmer
看到了:
Filters
-------
* trimmer
但是当我尝试使用它时(就像我以前那样):
<div>{% apply trimmer %} this must be trimmed {% endapply %}</div>
它爆炸了:
无法加载“TurboLabIt\TLIBaseBundle\Twig\TrimmerExtensionRuntime”运行时。
我错过了什么?
很难从文档中准确理解应该如何配置。按照我的理解,TrimmerExtension
应该被标记为 extension
and/or TrimmerExtensionRuntime
应该被标记为 runtime
。
TurboLabIt\TLIBaseBundle\Twig\TrimmerExtension:
tags: [twig.extension]
TurboLabIt\TLIBaseBundle\Twig\TrimmerExtensionRuntime:
tags: [twig.runtime]
我在 https://symfony.com/doc/current/templating/twig_extension.html 之后创建的项目中有一个小的 twig 自定义过滤器。只要它位于 src/Twig
,它就会按预期工作。
现在我正尝试将其移至自定义包 (vendor/turbolabit/tli-base-bundle/src/Twig/
) 以使其可重复使用。
我移动了两个文件:
<?php
namespace TurboLabIt\TLIBaseBundle\Twig;
use App\Twig\AppRuntime;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
class TrimmerExtension extends AbstractExtension
{
public function getFilters()
{
return [
new TwigFilter('trimmer', [TrimmerExtensionRuntime::class, 'trim']),
];
}
}
<?php
namespace TurboLabIt\TLIBaseBundle\Twig;
use Twig\Extension\RuntimeExtensionInterface;
class TrimmerExtensionRuntime implements RuntimeExtensionInterface
{
public function trim(string $value): string
{
return trim($value);
}
}
我在 services.yaml
中标记了它:
TurboLabIt\TLIBaseBundle\Twig\TrimmerExtension:
tags: [twig.runtime]
(我也试过 tags: [twig.extension]
,即使它是不正确的,因为这是一个延迟加载的过滤器,但它没有区别)
我在symfony console debug:twig --filter=trimmer
看到了:
Filters
-------
* trimmer
但是当我尝试使用它时(就像我以前那样):
<div>{% apply trimmer %} this must be trimmed {% endapply %}</div>
它爆炸了:
无法加载“TurboLabIt\TLIBaseBundle\Twig\TrimmerExtensionRuntime”运行时。
我错过了什么?
很难从文档中准确理解应该如何配置。按照我的理解,TrimmerExtension
应该被标记为 extension
and/or TrimmerExtensionRuntime
应该被标记为 runtime
。
TurboLabIt\TLIBaseBundle\Twig\TrimmerExtension:
tags: [twig.extension]
TurboLabIt\TLIBaseBundle\Twig\TrimmerExtensionRuntime:
tags: [twig.runtime]