【问题标题】:Using OOP / Classes to validate a form?使用 OOP / 类来验证表单?
【发布时间】:2013-10-23 14:25:16
【问题描述】:

我想创建一个 HTML 表单来将有关企业的信息存储在数据库中。 使用 OOP 是个好主意吗? 我想创建一个“企业”类,每个 set(...) 方法都有检查方法,以验证表单。

企业对象将填充表单中的信息。 如果数据无效,则会引发异常,这将导致 HTML 表单中出现错误消息。

如果一切正确,属性/信息将被写入数据库。

【问题讨论】:

  • 如果它只是一种简单的形式,我不会增加太多复杂性。这只是我的看法。
  • 是的,这是一个正确的方法。

标签: php class oop object design-patterns


【解决方案1】:

使用 OOP 通常是个好主意(除非您的项目非常小)。 Here is a link 另一个问题,有人已经写了一个类来做我认为你正在尝试的事情。几乎所有框架都提供某种验证类。查看其中任何一个的代码将是一种很好的体验。

【讨论】:

    【解决方案2】:

    因此,最后,您将需要一些与您将要插入此数据的数据库表相匹配的类。

    如果您设想您的表单将需要支持许多主要相似但略有不同的“企业”,您可以创建一个超级“企业”类,并为您希望支持的每个不同企业对其进行子类化。

    否则,如果您认为您对“企业”的定义将保持相对静态,那么创建面向对象层次结构所增加的复杂性将是您最好花时间处理应用程序的其余部分的时间!

    【讨论】:

      【解决方案3】:

      我不知道“表单”OOP 模式是否存在,但在我们使用 onPHP 框架的项目中,我们有这样的类。 我真的很喜欢用它来验证和预处理任何“来自世界”的传入数据。如果您不使用任何框架,那么开始使用任何公认的框架可能是一个好主意,因为它们中的大多数都具有模型/表单验证功能。 只是给出这个想法的一个例子:

      /* @var $request HttpRequest */
      $form = AccountFormFactory::getRegistrationForm()
          ->import($request->getPost())
          ->checkRules();
      
      if ($form->getErrors()) {
          // didn't pass validation, do something
          ...
      }
      

      在 AccountFormFactory::getRegistrationForm() 的某个地方

      $form
          ->add(Primitive::string('email')->setPattern('~regex pattern~')->required())
          ->add(Primitive::string('password')->required())
          ->addMissingLabel('email', TranslationMarkers::REQUIRED_VALUE)
          ->addMissingLabel('password', TranslationMarkers::REQUIRED_VALUE)
          ->addWrongLabel('email', TranslationMarkers::INVALID_EMAIL)
          ->addWrongLabel('password', TranslationMarkers::INVALID_PASSWORD)
          ->addRule(
              'uniqueEmail', 
              function (Form $form) {
                  $email = $form->exportValue('email');
                  if (User::dao()->findByEmail($newEmail)) {
                      $form
                          ->markWrong('email')
                          ->addWrongLabel('email', TranslationMarkers::DUPLICATE_EMAIL);
                  }
              }
          );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 2018-01-22
        • 2014-01-21
        • 2012-05-10
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        相关资源
        最近更新 更多