Ste*_*ose 6 php validation model-view-controller symfony1
这是一个与Symfony有关的快速问题,但可能是一般的MVC问题.
例如,我的模型中有一个类WebUser.这个类有一个属性email_address.该值必须是唯一的WebUser.
现在,我已经做到了所以我所有的Symfony表单都验证了email_address它对于给定的是唯一的WebUser,但是我想知道我是否应该将此验证添加到模型中?
但这也让我想到,如果你真的验证set()模型中的每个方法?确定数据库中没有错误的数据结束似乎是一个明智的决定,但是大多数(如果不是全部)数据必须通过控制器,这也会验证.所以对我来说,似乎我两次运行相同的验证,它似乎毫无意义?
你对此有何看法?我仍然倾向于在模型中进行验证,因为它决定了业务逻辑,因此最有意义.
如果您应该在模型中进行验证,那么如何set()在表单框架正确处理的Symfony中抛出适当的错误?
谢谢.
我不同意"验证应该是域逻辑的一部分,而不是前端逻辑".
验证是应用程序的复杂功能部分,必须具有上下文感知功能.即.你必须知道用户是否已登录,她拥有什么样的凭据,请求/表单的状态等等.模型必须与上下文无关(在任何环境中工作,不仅是http请求,还有cli等),因此他们不了解用户,状态和http请求.这是对模型类的可测试性的强烈要求.
对于上述原因,功能验证必须属于知道应用程序状态的形式(即会话).symfony对sfValidator*类有很大帮助,这些类确实属于表单组件.这就是为什么表单通过功能测试进行测试的原因.
数据验证应该在模型中(即检查值是整数还是字符串,检查它是否为空等等).使用Doctrine模式内验证规则可以轻松完成此操作.