0

我最近才开始 Web 编程,我很惊讶虽然我使用了一个验证库,但我仍然得到 20-30 行代码用于验证,这还不包括错误消息和回调函数。我正在使用 Kohana MVC 框架,我想知道是否有任何方法可以缩短我的验证代码。我试图想到以下

  1. 将验证代码放入我的模型中(对于像我这样的菜鸟来说,这是相当有的)。
  2. 创建一个非常小的库来验证条目(挂钩到验证类的东西,因此允许我调用该库以执行重复的过程,如用户注册、编辑和其他东西)

或者有没有更好更有效的方法?

4

3 回答 3

2

我使用 Zend_Validate 和 Zend_Forms 进行验证,其中验证代码位于表单 init 方法中。我所要做的就是为每个元素传递一个验证器数组,然后运行 ​​..

$form->isValid($data);

...在表单之外验证数据。

验证数组很容易超过 30 行,因为我用换行符分隔每个数组条目。但我想如果你为每个元素正确定义细粒度的验证规则,你就会拥有它。

在 Zend 中定义新的验证器真的很容易。

编辑:我发现了一个扩展 Zend 框架的框架,它允许域对象包含自己的验证。它称为 Xyster 框架,但我无法在第一次尝试时让它工作,所以在那之后我没有尝试过。

于 2009-09-14T04:33:35.563 回答
2

我强烈建议将验证包括在模型中。一旦你能够做一个,你创建的任何其他人都会容易得多。另外,如果您有多个控制器尝试保存该数据,则无需重新编码验证。Kohana 文档包含一些集成验证库和 ORM 的示例,您应该从那里开始。

于 2009-09-16T03:28:31.083 回答
0

这是我处理验证代码的策略。我想通过“验证库”,您的意思是那些只是确保电子邮件是电子邮件,电话号码是数字,并且本质上不是业务规则的那些。

想法是将每个业务规则代码作为一个函子 - 如果是 PHP,您可以通过使用字符串来定义函数来获得;对于其他语言,您可能必须使用策略模式。为函子定义一个接口(PHP 不需要)并将其转储到一个数组中。

遍历将成功、错误和错误代码返回到缓冲区的数组。最后,检查错误缓冲区并确定哪个验证失败。使用它来自定义视图。

这是一个例子

$checkUniqueUserName = new CheckUniqueUserName();
$checkEmailNotUsed = new EmailNotUsed();
$validator = array();
$validator[$checkUniqueUserName->name()] = $checkUniqueUserName;
$validator[$checkEmailNotUsed->name()] = $checkEmailNotUsed;

$results = array();

foreach ($validator as $v)
{

  $result[$v->getValidatorName()] = $v->execute($userInfo);
}

class CheckUniqueUserName()
{

   public function execute($userInfo)
   {
       // SQL blah blah blah

      if ($bNameUnique)
        return array ('success' => 1)
      else
        return array ('success' => 0, 'error' => "$name is in used", 'error_code' => 'duplicate_name);

   }

}

最后,您将得到一个结果数组,每个数组都填充了一个验证过程,并且您知道哪些失败了,哪些没有。然后可以将其传递给客户端进行进一步处理,例如突出显示失败的字段。error_code 用于查找正确的错误消息和应用到它的格式。

不过,我不太确定您所说的回调是什么意思。

于 2009-09-14T04:31:05.163 回答