【发布时间】:2015-05-30 18:36:22
【问题描述】:
我正在运行 CI 表单验证并使用 form_error() 分别显示每个字段的错误。但问题是 form_error() 函数只返回第一个验证错误
示例字段:
<input type="text" name="value" value="short">
验证脚本:
$validationRules = "min_length[6]|numeric";
$this->form_validation->set_rules(
'value',
'lang:mod_the_field',
$validationRules
);
if($this->form_validation->run() === FALSE){
echo form_error('value');
}
以上输出:<p>The Value field must be at least 5 characters in length.<\/p>
虽然该字段作为数值也未能通过验证。
我似乎找不到这方面的文档。我是否缺少一个简单的步骤来获取单个字段输出的所有验证错误?有没有比多次运行验证更好的解决方案,每条规则一次?
编辑: 需要明确的是,我在这个特定示例中寻找的输出是:
<p>The Value field must contain only numbers.</p>
<p>The Value field must be at least 5 characters in length.</p>
一种解决方案是为每个规则运行一次验证并汇总输出,但我试图找出是否有办法在 CI 中开箱即用地执行此操作?
解决方案:
我检查了 Form_validation 库,发现 Samutz 的评论是正确的。脚本在第一次验证错误后中断并返回。
我没有扩展任何类,而是更改了代码以迭代每个规则并连接错误字符串,如下所示:
$validationRules = "min_length[6]|numeric";
$validationRules = explode('|', $validationRules);
$errors = '';
foreach($validationRules as $rule){
$this->form_validation->set_rules(
'value',
'lang:mod_the_field',
$rule
);
if($this->form_validation->run() === FALSE){
$errors .= form_error('value');
}
}
$errors = ($errors) ? $errors : FALSE;
echo $errors;
【问题讨论】:
-
问题是 CI 的表单验证库一旦失败,就会停止检查单个项目的规则。在您的情况下,一旦 min_length[6] 失败并且不会检查数字规则,它就会停止。您需要扩展表单验证库,可能还需要扩展表单助手以获得您想要的结果。
标签: php codeigniter validation