Логическая проверка формы Symfony - PullRequest
0 голосов
/ 13 января 2010

Используя Symfony1, как я могу проверить, что одно из двух полей заполняется в форме? Это обязательные поля, но мне нужно, чтобы пользователь заполнил одно из двух полей. Пока это моя попытка, но она не работает:

$this->setValidator('phone', new sfValidatorAnd(
  array(
    new sfValidatorSchemaCompare('email', '==', ''),
    new sfValidatorSchemaCompare('phone', '==', ''),
  ),
  array(),
  array(
    'invalid' => 'El e-mail no tiene un formato correcto',
    'required' => 'Campo obligatorio',
  )
));

Ответы [ 2 ]

3 голосов
/ 14 января 2010

При сравнении двух отдельных полей вы должны использовать глобальный валидатор: http://www.symfony -project.org / forms / 1_2 / ru / 02-Form-Validation # chapter_02_global_validators . Ваш текущий подход всегда помечает поле телефона как недействительное при возникновении ошибки. Кроме того, условия, которые вы предоставляете валидатору, должны возвращать true, когда значения действительны, поэтому в вашем случае вы должны использовать ValidatorOr с! = Сравнениями, подобными этим:

$this->validatorSchema->setPostValidator(new sfValidatorOr(
  array(
    new sfValidatorSchemaCompare('email', '!=', ''),
    new sfValidatorSchemaCompare('phone', '!=', ''),
  ),
  array(),
  array('invalid' => 'Campo obligatorio')
));

Надеюсь, это поможет.

0 голосов
/ 13 января 2010

Я не уверен, что есть лучший метод, но вы могли бы использовать sfValidatorOr, чтобы проверить, проверяет ли одно из полей (то есть, установите значение true).

Подробнее о sfValidatorOr: http://www.symfony -project.org / форма / 1_2 / а / B-валидаторы # chapter_b_sub_sfvalidatoror

...