条令实体验证(设置方法验证或事件驱动)


Doctrine Entity Validation (Setter Method Validation or Event Driven)

今天出现了一个非常有趣的话题,有两种观点。

使用条令实体

  1. 是否应该在调用setter方法时对数据进行验证?即在setFieldName()方法内部,或者
  2. 在实体上触发事件时,是否应将实体作为一个整体验证为有效数据

是否存在正常久经考验的理论和/或观点?

我认为没有"正常"/标准的方法来实现这一点——我想这取决于您的需求。我可以告诉你我的观点:对我来说,数据验证应该尽快在setter上完成。这样你就不能有一个实体上有无效的数据集,当你要持久化时,这会让你头疼。

试着这样想:假设你有一辆汽油车。你去加油站加油。你有两个加油泵:汽油和汽油。如果没有验证,你就可以在那里放入任何一种燃料,在你打开发动机之前,都不会发生任何事情。但当你这样做的时候,如果你放错了燃料类型,那就太晚了。Boooooooom!当然实体不会爆炸。)

话虽如此,有时不可能对单个setter进行验证,因为它可能依赖于另一个属性(尚未设置)。类似于用户实体的VATID,其中属性user_type(private|company)必须可用,才能检查并强制公司使用VATID。在这种情况下,您需要进行一些PrePersist/PreUpdate验证。