我最近刚刚开始进行网络编程,我非常惊讶,虽然我使用的是验证库,但我仍然只能获得20-30行代码进行验证,不包括错误消息和回调函数。我正在使用Kohana MVC框架,我想知道是否有任何方法可以缩短我的验证码。我试着想到以下
还是有更好更有效的方法吗?
答案 0 :(得分:2)
我使用Zend_Validate和Zend_Forms进行验证,其中验证代码在表单init方法中。我所要做的就是为每个元素传递一系列验证器,然后运行..
$form->isValid($data);
...在表单之外验证数据。
验证数组很容易超过30行,因为我用换行符分隔每个数组条目。但是,如果你为每个元素定义细粒度的验证规则,我想你会有这个。
在Zend中定义新的Validators非常容易。
编辑:我发现了一个扩展Zend Framework的框架,它允许域对象包含自己的验证。它被称为Xyster框架,但我无法在第一次尝试时使用它,所以我之后没有尝试过。
答案 1 :(得分:2)
我强烈建议您在模型中加入验证。一旦你能够做到一个,你创建的任何其他人将更容易。此外,如果您有多个控制器试图保存该数据,则无需重新编码验证。 Kohana文档包含一些用于集成验证库和ORM的示例,您应该从那里开始。
答案 2 :(得分: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用于查找正确的错误消息和应用于它的格式。
我不确定你回调的意思。