我想创建一个 HTML 表单来将有关企业的信息存储在数据库中。使用 OOP 是个好主意吗?我想创建一个“企业”类,每个 set(...) 方法都有检查方法,以验证表单。
企业对象将填充表单中的信息。如果数据无效,则会引发异常,这将导致 HTML 表单中出现错误消息。
如果一切正确,属性/信息将被写入数据库。
我想创建一个 HTML 表单来将有关企业的信息存储在数据库中。使用 OOP 是个好主意吗?我想创建一个“企业”类,每个 set(...) 方法都有检查方法,以验证表单。
企业对象将填充表单中的信息。如果数据无效,则会引发异常,这将导致 HTML 表单中出现错误消息。
如果一切正确,属性/信息将被写入数据库。
使用 OOP 通常是一个好主意(除非您的项目非常小)。这是另一个问题的链接,其中有人已经编写了一个类来做我认为你正在尝试的事情。几乎所有框架都提供某种验证类。查看其中任何一个的代码将是一种很好的体验。
我不知道“表单”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);
}
}
);
因此,最后,您将需要一些与您将插入此数据的数据库表相匹配的类。
如果您设想您的表单将需要支持许多主要相似但略有不同的“企业”,您可以创建一个超级“企业”类,并为您希望支持的每个不同企业对其进行子类化。
否则,如果您认为您对“企业”的定义将保持相对静态,那么创建面向对象层次结构所增加的复杂性将是您最好花时间处理应用程序的其余部分的时间!