请求验证在 Symfony 中强加了验证代码重复
Request validation imposes validation code duplication in Symfony
假设我有一个创建用户的 REST API 方法。我还有一个配置了验证约束的用户实体。问题是如何验证请求中的数据。我的问题是:
- 我无法在不事先验证请求中的数据的情况下填充用户实例 - 其中可能缺少某些数据,其他数据可能无效。例如
null
通过 string
类型提示传递给用户实体的 setter。
- 我不太热衷于在填充用户实例之前单独验证请求数据,因为它会重复为用户实体配置的验证约束。在控制器和实体验证配置这两个地方管理相同或相似的验证约束将是一个问题。
所以基本上我想避免在代码和配置中重复验证约束,但同时我不得不在填充实体之前复制它。我怎样才能克服这个问题?
很生理。
我建议使用不检查任何限制的 DTO(基本上您可以在 setter 中接受 "all kind of data",甚至可以使用不那么麻烦的 public 属性)并对其进行验证。
当DTO有效时,创建有效状态的底层对象(值对象?)
当然你需要 "duplicate" 一些约束,但我不认为这是 真正的 重复,因为实际上,DTO 和基础对象 不是同一个对象,即使它们看起来是相关的。如果您不同意 - 可能是这种情况 - 只需停下来想想通过将实体(应该 always 处于有效状态)从用户所在的模型中解耦而获得的提升已获取输入数据。
假设我有一个创建用户的 REST API 方法。我还有一个配置了验证约束的用户实体。问题是如何验证请求中的数据。我的问题是:
- 我无法在不事先验证请求中的数据的情况下填充用户实例 - 其中可能缺少某些数据,其他数据可能无效。例如
null
通过string
类型提示传递给用户实体的 setter。 - 我不太热衷于在填充用户实例之前单独验证请求数据,因为它会重复为用户实体配置的验证约束。在控制器和实体验证配置这两个地方管理相同或相似的验证约束将是一个问题。
所以基本上我想避免在代码和配置中重复验证约束,但同时我不得不在填充实体之前复制它。我怎样才能克服这个问题?
很生理。
我建议使用不检查任何限制的 DTO(基本上您可以在 setter 中接受 "all kind of data",甚至可以使用不那么麻烦的 public 属性)并对其进行验证。
当DTO有效时,创建有效状态的底层对象(值对象?)
当然你需要 "duplicate" 一些约束,但我不认为这是 真正的 重复,因为实际上,DTO 和基础对象 不是同一个对象,即使它们看起来是相关的。如果您不同意 - 可能是这种情况 - 只需停下来想想通过将实体(应该 always 处于有效状态)从用户所在的模型中解耦而获得的提升已获取输入数据。