【问题标题】:Where is the best place to verify form data?验证表单数据的最佳位置在哪里?
【发布时间】:2009-12-02 08:30:26
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

如果您将 MVC 中的模型视为我们在 .NET 世界中称为 ViewModel(我相信在其他地方称为 Presentation Models)而不是域模型,那么模型将是添加验证/验证的绝佳场所。

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

作为健全性检查,ASP.NET MVC 框架似乎也在朝着这个方向发展。由于这个问题被标记为“php”,我不确定最后一条信息是加强还是削弱了论点。

【讨论】:

【解决方案2】:

验证是对输入的控制。 MVC 代表 Model View Controller,因此验证应该在控制器中。

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

【讨论】:

  • -1 我认为您混淆了 Control 和 Controller 的语义相似性,暗示应该存在结构等价。
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多