0

我的_form.php模板中有这段代码(省略了一些不相关的字段):

<?php echo $form['correo_madre'] ?>
<?php echo $form['correo_madre']->renderError() ?>

在我的 AlumnosForm.class.php 中有这个:

public function configure() {
   $this->validatorSchema['correo_padre'] = new sfValidatorEmail(array(), array('invalid' => 'La dirección de correo no es válida'));
   $this->validatorSchema['correo_madre'] = new sfValidatorEmail(array(), array('invalid' => 'La dirección de correo no es válida'));

   $this->validatorSchema->setPostValidator(new sfValidatorCallback(array('callback' => array($this, 'checkFields'))));
}

public function checkFields($validator, $values) {
  if ((!empty($values['alumnos_nombre_padre']) &&    
       !empty($values['alumnos_apellidos_padre']) &&
       !empty($values['alumnos_rut_padre']) &&
       !empty($values['alumnos_telefono_padre']) &&
       !empty($values['alumnos_direccion_padre']) &&
       !empty($values['alumnos_correo_padre'])) ||
       (!empty($values['alumnos_nombre_madre']) &&
       !empty($values['alumnos_apellidos_madre']) &&
       !empty($values['alumnos_rut_madre']) &&
       !empty($values['alumnos_telefono_madre']) &&
       !empty($values['alumnos_direccion_madre']) &&
       !empty($values['alumnos_correo_madre']))) {
            return $values;
        } else {
            throw new sfValidatorError($validator, 'Los datos de uno de los dos padres son requeridos!!!');
   }
}

我还检查了 BaseAlumnosForm.class.php 并且验证器中不需要字段:

'correo_madre' => new sfValidatorString(array('max_length' => 100, 'required' => false))

当我尝试提交表单过程失败时

必需的

留言,为什么?

4

1 回答 1

2

configure()由于您在of 中重新定义了验证器,因此内部AlumnosForm的定义BaseAlumnosForm被覆盖。

所以你应该关注里面的验证器AlumnosForm (你是在这个类中定义了两次还是只是一个错字?)

默认情况下,需要验证器

required: true如果值是必需的,false否则(默认为true

这就是为什么 Base 内部的那个明确地位于false. 在您的情况下,覆盖的定义将其删除,false因为您没有定义它。

强制它,它应该可以解决您的问题:

$this->validatorSchema['correo_padre'] = new sfValidatorEmail(
    array('required' => false),
    array('invalid'  => 'La dirección de correo no es válida')
);
于 2013-03-08T16:30:30.680 回答