使用OOP / Classes来验证表单?

时间:2013-10-23 14:25:16

标签: php class oop object design-patterns

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

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

如果您认为您的表单需要支持一些主要类似但略有不同的“企业”,您可以创建一个超级“企业”类,并为您希望支持的每个不同企业创建一个子类。

否则,如果您认为您对“企业”的定义将保持相对静态,那么创建面向对象层次结构的额外复杂性将是您可以更好地花费在应用程序其余部分上的时间!

答案 2 :(得分:0)

我不知道是否存在“form”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);
            }
        }
    );