Zend框架:条件验证

eas*_*ent 2 forms validation conditional zend-framework zend-validate

我需要根据另一个字段的值为表单字段设置一些验证.

例如,如果专业是博士,那么要求专业不是空白('')或没有('无').

$professionOptions = array(
        ''      => 'Choose Profession',
        'Dr.'   => 'Dr.',
        'zzz'   => 'zzz',
        'None'  => 'None');
 $this->validator->field('profession')->inArray(array_keys($professionOptions)) ->message('Invalid profession.');


 $specialtySelectOptions = array(
            ''      => 'Choose Specialty',
            'Heart' => 'Heart',
            'Lungs' => 'Lungs',
            'Feet'  => 'Feet',
            'Nose'  => 'Nose');
Run Code Online (Sandbox Code Playgroud)

我如何使以下依赖于职业?

$this->validator->field('specialty')->inArray(array_keys($specialtySelectOptions))
                                            ->message('Invalid salutation.');
Run Code Online (Sandbox Code Playgroud)

xyz*_*mma 6

您可以在表单类中扩展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);
    }

}
Run Code Online (Sandbox Code Playgroud)