如何禁用ApiPlatform中输入对象的自动校验功能?
解决方案
方案1:针对单个操作关闭校验(推荐)
直接在对应的API操作配置中添加validate: false参数即可彻底跳过ApiPlatform的自动校验流程,不会触发任何校验器执行、也不会解析实体约束,完全满足需求。
修改你的Present实体的ApiResource配置如下:
#[ ORM\Entity(), ORM\Table(name: '`presents`'), ApiResource( collectionOperations: [ 'get', 'post' => [ 'messenger' => 'input', 'input' => AddPresentRequest::class, 'validate' => false, // 新增这一行关闭当前操作的自动校验 ], ], itemOperations: ['get'], ), ] class Present { // ... }
这个方案灵活性最高,你可以只针对使用Messenger的操作关闭校验,其他普通接口仍然可以保留ApiPlatform的自动校验能力。
方案2:全局关闭所有ApiPlatform自动校验
如果你所有场景的校验都统一交给Messenger中间件或者业务层处理,可以直接全局关闭ApiPlatform的校验功能,无需逐个操作配置。
修改config/packages/api_platform.yaml配置文件:
api_platform: validation: enabled: false
配置生效后,所有API接口的自动校验都会被关闭,不会再有重复校验的问题。
内容的提问来源于stack exchange,提问作者Santa
相关产品推荐
相关产品推荐

