Drupal 9中Twig添加base64编解码过滤器报‘Unknown base64_encode filter’错误原因
解决Twig中"Unknown 'base64_encode' filter"错误
Twig核心并未内置base64_encode和base64_decode过滤器,直接使用会触发你遇到的错误。以下是不同环境下的解决方案:
原生Twig环境
初始化Twig实例时,直接添加自定义过滤器:
$twig = new Twig\Environment($loader); // 添加base64_encode过滤器 $twig->addFilter(new Twig\TwigFilter('base64_encode', function ($value) { return base64_encode($value); })); // 可选:添加base64_decode过滤器 $twig->addFilter(new Twig\TwigFilter('base64_decode', function ($value) { return base64_decode($value); }));
Symfony框架
创建自定义Twig扩展类,框架会自动注册:
// src/Twig/Base64Extension.php namespace App\Twig; use Twig\Extension\AbstractExtension; use Twig\TwigFilter; class Base64Extension extends AbstractExtension { public function getFilters(): array { return [ new TwigFilter('base64_encode', [$this, 'encode']), new TwigFilter('base64_decode', [$this, 'decode']), ]; } public function encode(string $value): string { return base64_encode($value); } public function decode(string $value): string { return base64_decode($value); } }
Drupal环境(适配你的代码场景)
通过自定义模块添加Twig扩展:
- 创建扩展类:
// modules/custom/my_module/src/Twig/Extension/Base64Extension.php namespace Drupal\my_module\Twig\Extension; use Twig\Extension\AbstractExtension; use Twig\TwigFilter; class Base64Extension extends AbstractExtension { public function getFilters() { return [ new TwigFilter('base64_encode', [$this, 'base64Encode']), new TwigFilter('base64_decode', [$this, 'base64Decode']), ]; } public function base64Encode($string) { return base64_encode($string); } public function base64Decode($string) { return base64_decode($string); } public function getName() { return 'my_module.base64_extension'; } }
- 在模块的
services.yml中注册服务:
# modules/custom/my_module/my_module.services.yml services: my_module.base64_extension: class: Drupal\my_module\Twig\Extension\Base64Extension tags: - { name: twig.extension }
添加完成后,你原来的代码即可正常运行:
示例1:
{% set youtube_id = content.field_youtube_embed_code|render|striptags|trim %} {{ youtube_id|base64_encode }}
示例2:
<p>{{ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dapibus.'|base64_encode }}</p>
内容的提问来源于stack exchange,提问作者Souvik Das
相关产品推荐
相关产品推荐

