我最近刚刚开始进行网络编程,我非常惊讶,虽然我使用的是验证库,但我仍然只能获得20-30行代码进行验证,不包括错误消息和回调函数。我正在使用Kohana MVC框架,我想知道是否有任何方法可以缩短我的验证码。我试着想到以下

  1. 将验证码放入我的模型中(这对于像我这样的菜鸟来说非常重要。)
  2. 创建一个非常小的库来验证条目(挂钩到验证类的东西,从而允许我调用库以进行重复的过程,如用户注册,编辑和填充)
  3. 还是有更好更有效的方法吗?

有帮助吗?

解决方案

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

其他提示

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

$form->isValid($data);

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

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

在Zend中定义新的Validators非常容易。

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

这是我处理验证代码的策略。我想通过'验证库',你的意思是那些只是确保电子邮件是电子邮件,电话号码是数字的,而不是业务规则。

我们的想法是将每个业务规则代码作为一个函子 - 如果它是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用于查找正确的错误消息和应用于它的格式。

我不确定你回调的意思。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top