php – 您应该在模型中验证吗? (基于Symfony的问题,但与一般的MVC有关)

这是一个与Symfony有关的快速问题,但可能是一般的MVC问题.

我的模型中有一个类,例如WebUser.此类具有email_address属性.此值必须对每个WebUser都是唯一的.

现在,我已经完成了所有我的Symfony表单验证了email_address对于给定的WebUser是唯一的,但是我想知道是否应该将此验证添加到模型中?

但这也让我想到,如果你真的验证模型中的每个set()方法?确定数据库中没有错误的数据结束似乎是一个明智的决定,但是大多数(如果不是全部)数据必须通过控制器,这也会验证.所以对我来说,似乎我两次运行相同的验证,它似乎毫无意义?

你对此有何看法?我仍然倾向于在模型中进行验证,因为它决定了业务逻辑,因此最有意义.

如果你应该在模型中验证,你如何在Symfony中抛出一个由表单框架正确处理的适当的set()错误

谢谢.

我不同意“验证应该是域逻辑的一部分,而不是前端逻辑”.

验证是应用程序的复杂功能部分,必须具有上下文感知功能.即.你必须知道用户是否已登录,她拥有什么样的凭据,请求/表单的状态等等.模型必须与上下文无关(在任何环境中工作,不仅是http请求,还有cli等),因此他们不了解用户,状态和http请求.这是对模型类的可测试性的强烈要求.

对于上述原因,功能验证必须属于知道应用程序状态的形式(即会话). symfony对sfValidator *类有很大帮助,这些类确实属于表单组件.这就是为什么表单通过功能测试进行测试的原因.

数据验证应该在模型中(即检查值是整数还是字符串,检查它是否为空等等).使用Doctrine模式内验证规则可以轻松完成此操作.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...