три значения в ValidatorOR Symfony - PullRequest
0 голосов
/ 15 июля 2011

Я основал это в stackoverflow:

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

Как я могу добавить для этих 3 значений?

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

это не работает.Тогда yahooid всегда требуется ... Например, если я ввожу электронную почту и телефон, тогда valid is false, но если я ввожу yahooid, то это нормально.

1 Ответ

0 голосов
/ 15 июля 2011

Во-первых, sfValidatorSchemaCompare () предназначен для сравнения двух полей , а не значения поля.Вместо этого используйте sfValidatorString.

Для ваших нужд sfValidatorCallback - мой лучший способ:

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

Тогда

public function fillAtLeastOne($validator, $values)
{
  if (!$values['email']) && !$values['phone'] && !$values['yahooid'])
  {
    // All the field are empty / null, throw an error !
    throw new sfValidatorError($validator, 'Campo obligatorio.');
  }

  // is correct, return the clean values
  return $values;
}

Параметр $ values ​​содержит все значения формытак что легко проверить что-либо с помощью validatorCallback.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...