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()の内部でバリデーターを再定義するため、内部AlumnosFormの定義BaseAlumnosFormはオーバーライドされます。

したがって、内部のバリデーターに焦点を当てる必要がありますAlumnosForm (このクラス内で2回定義しましたか、それともタイプミスだけですか?)

デフォルトでは、バリデーターが必要です

必須: true値が必須の場合、それ以外のfalse場合(デフォルトはtrue

そのため、ベース内のものは明示的ににあり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 に答える