验证表单数据的最佳位置在哪里?

时间:2009-12-02 08:30:26

标签: php model-view-controller design-patterns forms

问题很简单。我应该在哪里将表单验证过程放在mvc设计模式中(Zend,Symphony,Cakephp,Codeigniter)。我问这个问题,因为我有自己的框架。但我无法决定在哪里处理表单验证。例如,我可以在控制器中编写if语句,但这会使控制器“变胖”,或者我可以在模型函数中添加验证语句(在User :: register(,,)中)。当然,这不是一件非常复杂的事情,但我的目标是了解它们在企业级应用程序中的作用。

3 个答案:

答案 0 :(得分:2)

如果你认为MVC中的模型是我们在.NET世界中调用ViewModels(我相信在其他地方称为Presentation Models)而不是Domain Models,那么模型将是添加验证/验证的绝佳场所。 p>

这将允许您在重用模型的任何地方重用验证逻辑,这是有道理的,因为模型将验证逻辑与数据一起封装。这对我来说听起来很有凝聚力。

作为一个完整性检查,ASP.NET MVC框架似乎也朝着这个方向发展。由于这个问题被标记为'php',我不确定这最后一条信息是否会加强或削弱这一论点。

答案 1 :(得分:1)

验证是控制输入。 MVC代表模型视图控制器,因此验证应该在控制器中。

一般验证,如isInt(),isStr(),isEmailAddress,isFloat()等等可能/应该放在基本控制器中。然后,您可以为指定的模型(映射到数据库)提供子控制器。然后,这些子控制器从基本控制器扩展。

答案 2 :(得分:0)

有多个地方可以进行验证。

首先,客户端与服务器端:在发送线路之前,在客户端进行预验证(例如“仅允许数字!”)通常是一种很好的做法。服务器端验证始终是强制性的,作为安全性/数据完整性要求。

前端与模型要求:特定表单可能不知道模型对相关数据对象的要求(例如,如果存在业务逻辑规则,如果相关记录的数量不应存在特定字段中的值3小于5) - 唯一知道模型的地方。