Symfony 6.3:自定义html_sanitizer服务未在容器中显示
排查自定义HTML Sanitizer服务未显示的问题
1. 配置文件加载异常
- 确认
html_sanitizer.yaml放在config/packages/目录下,Symfony默认只加载这个路径下的包配置,放错位置的话配置不会被读取。 - 检查YAML语法:缩进必须严格对齐,冒号后必须加空格,比如正确的配置结构应该是:
html_sanitizer: sanitizers: app.project_sanitizer: allowed_tags: ['p', 'a', 'strong'] default_scheme: 'https' # 其他配置项
2. 环境不匹配导致配置失效
- 执行
debug:container时指定对应环境,比如你在dev环境配置的,就跑symfony console debug:container --env=dev,避免用错环境加载不到对应配置。 - 检查配置文件里有没有环境判断,比如加了
when@dev:的配置块,在prod环境下不会生效。
3. 服务命名与配置键不对应
- 自定义sanitizer的服务ID规则是
html_sanitizer.sanitizer.<配置键>,所以你配置里sanitizers下的键必须是app.project_sanitizer,才能生成目标服务ID。如果键名写错(比如多打了下划线或点),服务ID就会不匹配。
4. 缓存未清除
- 修改配置后必须清缓存:执行
symfony console cache:clear,尤其是prod环境,缓存默认开启,不清缓存新配置不会生效。
5. HtmlSanitizerBundle未注册
- 打开
config/bundles.php,确认以下行存在:
没注册bundle的话,Symfony\Component\HtmlSanitizer\HtmlSanitizerBundle::class => ['all' => true],html_sanitizer配置块会被直接忽略。
6. 测试环境额外注意事项
- KernelTestCase默认用
test环境,要确保html_sanitizer.yaml或html_sanitizer_test.yaml在test环境下有正确配置。 - 若测试环境开启了
inline_class_loader,可能导致服务无法被识别,可在config/packages/test/framework.yaml中关闭:framework: test: true # 注释或删除以下配置 # test: # container: # inline_class_loader: true
内容的提问来源于stack exchange,提问作者Frédéric Hébert
相关产品推荐
相关产品推荐

