启用VichUploaderBundle的namer时出现“Parent definition does not exist”错误求助
解决VichUploaderBundle配置namer时的「Parent definition does not exist」错误
这个问题我之前配置VichUploaderBundle时也踩过坑,核心原因很明确:
你直接在namer字段里写了类的完全限定名,但VichUploaderBundle会把这个值当作「服务ID」去容器里查找,而默认情况下OrignameNamer并没有被自动注册为可直接引用的服务,所以容器找不到对应的服务定义,就抛出了「Parent definition does not exist」的错误。
两种快速解决方法
方法一:使用Bundle内置的服务ID(推荐)
VichUploaderBundle已经为常用的namer类注册了内置服务,OrignameNamer对应的服务ID是vich_uploader.namer_original,直接替换配置里的类名即可:
# config.yml vich_uploader: db_driver: orm mappings: media_image: uri_prefix: '%uploads_dir%' upload_destination: '%kernel.root_dir%/../web/uploads/images' namer: vich_uploader.namer_original
方法二:手动注册类为服务(不推荐,除非你需要自定义)
如果一定要用类名的方式,需要在services.yml里把这个类注册为公开服务:
# services.yml services: Vich\UploaderBundle\Naming\OrignameNamer: public: true
不过这种方式完全没必要,因为Bundle已经帮我们内置了对应的服务,直接用方法一更简单。
额外验证
你的Media实体配置是没问题的:
- 正确添加了
@Vich\Uploadable注解 @Vich\UploadableField的mapping和配置里的media_image对应fileNameProperty、mimeType、size也都和实体字段正确绑定
所以只要修正namer的配置,这个错误就能解决。
内容的提问来源于stack exchange,提问作者breq
相关产品推荐
相关产品推荐

