Zend 框架:条件验证

发布于 2024-09-14 09:29:18 字数 830 浏览 9 评论 0原文

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

例如,如果职业是医生,则要求专业不能为空('')或无('none')。

$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');

我如何使以下内容取决于职业?

$this->validator->field('specialty')->inArray(array_keys($specialtySelectOptions))
                                            ->message('Invalid salutation.');

I need to set up some validation for a form field based on a value of another field.

For instance if profession is Doctor, then require specialty not to be blank ('') or none ('none').

$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');

How do i make the following dependent on the profession?

$this->validator->field('specialty')->inArray(array_keys($specialtySelectOptions))
                                            ->message('Invalid salutation.');

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

昨迟人 2024-09-21 09:29:18

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

}

You can extend the isValid() method in your form class, e.g.

/**
 * @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);
    }

}
执妄 2024-09-21 09:29:18

我通常走这条路

$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();
  }
}

I usually go this way

$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();
  }
}
山川志 2024-09-21 09:29:18

这家伙通过自定义验证类想出了一个巧妙的方法。
http://jeremykendall.net/2008/12/24 /条件形式验证-with-zend_form/

This guy figured out a slick way via a custom validation class.
http://jeremykendall.net/2008/12/24/conditional-form-validation-with-zend_form/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文