Symfony - изменить сообщение об ошибке почтового валидатора без переопределения других валидаторов? - PullRequest
2 голосов
/ 18 июля 2011

Я использую плагин sfGuard для Doctrine.

Я хочу переопределить сообщение об ошибке по умолчанию для уникального имени пользователя.

В настоящий момент я получаю следующее: «Объект с таким же« именем пользователя »уже существует.».

Итак, я попытался сделать это:

$this->validatorSchema->getPostValidator('username')->setMessage('invalid', 'The username is already taken.');  

, который не работал.

Тогда я тоже попробовал

$this->mergePostValidator(
  new sfValidatorDoctrineUnique(
    array(
      'model' => 'sfGuardUser',
      'column' => array('username'),
      'throw_global_error' => false
    ),
    array(
      'invalid' => 'The username is already taken.'
    )
  )
);

и теперь я получаю 2 ошибки: мою и ошибку по умолчанию.

Как я могу исправить вторую часть кода, чтобы получить только 1 сообщение?

Редактировать: http://trac.symfony -project.org / ticket / 9426

1 Ответ

5 голосов
/ 18 июля 2011

Добавьте этот метод к BaseDoctrineForm.Затем в вашем методе настройки (или в любом другом месте) вы можете сделать:

public function configure()
{
  $this->getPostValidatorUnique(array('username'))->setMessage('invalid', 'IN YOUR FACE');
}

Метод:

/**
 * @param array $columns
 * @param sfValidatorBase $validator
 * @return sfValidatorDoctrineUnique
 */
public function getPostValidatorUnique($columns, $validator = null)
{
  if ($validator === null)
  {
    $validator = $this->getValidatorSchema()->getPostValidator();
  }
  if ($validator instanceof sfValidatorDoctrineUnique)
  {
    if (!array_diff($validator->getOption('column'), $columns))
    {
      return $validator;
    }
  }
  elseif (method_exists($validator, 'getValidators'))
  {
    foreach($validator->getValidators() as $childValidator)
    {
      if ($matchingValidator = $this->getPostValidatorUnique($columns, $childValidator))
      {
        return $matchingValidator;
      }
    }
  }
  return null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...