我会完全不同地构造数组,例如:
$config = array(
'firstname' => array('notEmpty' = true,
'limit' => 30),
'lastname' => array('notEmpty' = true,
'limit' => 35)
);然后我会创建一个方法validate,如下所示:
public function validate($config, $data) {
$error = array();
foreach($data as $field => $value) {
$c = $config[$field];
if(array_key_exists('notEmpty', $c)) {
if(!$this->checkEmpty($value)) {
$this->addError($error, $field, 'Must not be empty');
}
}
if(array_key_exists('limit', $c)) {
if(!$this->checkLength($value, $c['limit'])) {
$this->addError($error, $field, 'Must not be longer than' . $c['limit'] . ' characters');
}
}
/*...*/
}
return $error;
}
private function addError(&$error, $field, $msg) {
if(!array_key_exists($field, $error)) {
$error[$field] = array();
}
$error[$field][] = $msg;
}然后你打电话:
$validation = new Validation();
$errors = $validation->validate($config, $_POST);和$errors将包含每个字段的所有错误消息。您只需要循环它们并在字段旁边打印它们。
当然,这段代码可以(而且应该是!)得到改进。例如。动态查找验证方法)。
也就是说,我强烈建议您查看并使用现成的验证类,例如Zend_Validate