Zend framework Zend框架:条件验证
我需要根据另一个字段的值为表单字段设置一些验证 例如,如果专业是医生,则要求专业不能为空(“”)或无(“”) 我如何使以下内容依赖于专业Zend framework Zend框架:条件验证,zend-framework,forms,conditional,validation,zend-validate,Zend Framework,Forms,Conditional,Validation,Zend Validate,我需要根据另一个字段的值为表单字段设置一些验证 例如,如果专业是医生,则要求专业不能为空(“”)或无(“”) 我如何使以下内容依赖于专业 $this->validator->field('specialty')->inArray(array_keys($specialtySelectOptions)) ->message('Invalid salutation.'); 我通常走这条路
$this->validator->field('specialty')->inArray(array_keys($specialtySelectOptions))
->message('Invalid salutation.');
我通常走这条路
$f = new My_Form();
if($f->isValid($_POST)) {
// extra validation
if($f->getValue('profession') === 'Dr.') {
$specialty = $f->getValue('specialty');
if($specialty === '' || $specialty === 'none') {
$f->markAsError();
$f->specialty->addError('error_msg');
}
}
if(!$f->isErrors()) {
$f->save();
}
}
这家伙通过自定义验证类找到了一种巧妙的方法。 您可以在表单类中扩展isValid()方法,例如
/**
* @param array $data The data from the request to validate
*/
public function isValid($data)
{
$this->checkSpecialityForProfession($data);
return parent::isValid($data)
}
protected function checkSpecialityForProfession($data)
{
if($data['profession'] === 'Dr.') {
$validator = new Zend_Validate_InArray(array(
'Heart',
'Lungs',
'Feet',
'Nose',
)
);
$this->getElement('specialty')->addValidator($validator);
}
}
/**
* @param array $data The data from the request to validate
*/
public function isValid($data)
{
$this->checkSpecialityForProfession($data);
return parent::isValid($data)
}
protected function checkSpecialityForProfession($data)
{
if($data['profession'] === 'Dr.') {
$validator = new Zend_Validate_InArray(array(
'Heart',
'Lungs',
'Feet',
'Nose',
)
);
$this->getElement('specialty')->addValidator($validator);
}
}