gpt4 book ai didi

php - 这是进行表单验证的好设计吗?

转载 作者:行者123 更新时间:2023-12-04 06:59:53 24 4
gpt4 key购买 nike

对于我的框架,我写下了这个概念来解决表单验证问题。我希望它对框架用户来说尽可能简单。

每个 Form (=object) 都有一个或多个 FormElements (=objects)。每个 FormElement 可以有 0-n 个 FormValidators (=objects)。一切都可以通过后端轻松配置(简单的拖放操作)。

当表单 View 被渲染时,它会遍历所有的 FormElements,并且对于它们中的每一个,它都会遍历所有关联的 FormValidator。这样它就构建了所有需要的 JavaScript 来验证客户端的表单。

FormValidator 是一个轻量级的对象,它只定义了这七件事:

  • 验证实用程序类的 PHP 类名
  • 验证实用程序类的方法名称,必须调用
  • 附加参数的字符串(逗号分隔值)
  • 验证实用程序的 JavaScript“类”名称
  • 必须调用的“方法”名称
  • 附加参数的字符串(逗号分隔值)
  • 一个关联的 ErrorInfo 对象,其中包含格式化的错误消息

  • 这些验证方法中的每一个都将带有输入数据的输入变量作为第一个参数。这些方法中的每一个都只检查输入是否与某些规则匹配,并返回 TRUE 或 FALSE。

    当表单被提交时,一个 FormDataManager 被创建并接收:
    - Form 对象(所以它知道数据来自哪里)
    - 输入数据(通常为 $_POST)

    然后它只是遍历所有 FormElements,检查它们所有的 FormValidators,如果有任何无效,它会重新加载传递错误消息数组的 Form。如果一切正常,数据将被进一步处理(即存储到 db)。

    这个设计有改进吗?我错过了什么吗?

    最佳答案

    我认为您错过的一个常见验证概念是验证组。例如,您可能想要满足以下场景之一:

  • 仅当字段 A 具有任何值时,表单字段 B 才是必需的。
  • 仅当字段 A 具有特定值时,表单字段 B 才是强制性的。
  • 仅当字段 A 在特定范围内(数字或日期)时,表单字段 B 才是强制性的。
  • 字段 A 或字段 B 都需要有一个值(它们不能都为空)。
  • 字段 A 或字段 B 都需要有一个值(它们不能都为空或都有一个值) - (XOR)。
  • 密码和确认密码字段需要相等。

  • 而且我确信还有其他场景验证取决于其他表单元素的有效性或可选方面。此外 - 上述场景中的“强制性”也可能只是“适用”,这又是一种不同的情况。
    这里的典型(医疗系统)示例是:“你是男/女?”,后续是“你怀孕了吗?”对于女性。或者与 AOP 相关的问题,如果他们是 65 岁或以上,那么您有生日并有特定的后续问题。

    这意味着您需要一些验证组或验证关联对象,以有用且通用的方式包含这些依赖项。

    我猜在您的设计中,这意味着您还可以拥有不直接链接到一个 FormElement 而是链接到 FormElement 组合的 FormValidator 对象,并在触发验证之前包括条件检查。

    关于php - 这是进行表单验证的好设计吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2042922/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com