Как «эффективно» установить сообщения об ошибках по умолчанию для sfValidatorInteger и т. Д.? - PullRequest
2 голосов
/ 31 января 2011

Я только что натолкнулся на проблему, которую, как я полагаю, представлял собой «баг» в структуре Symfony: я хочу установить сообщения об ошибках по умолчанию для разных типов валидаторов (например, sfValidatorInteger). Для этого внутри моего ProjectConfiguration::setup метода у меня есть:

sfValidatorBase::setDefaultMessage('required', 'Erforderlich.');
sfValidatorBase::setDefaultMessage('invalid', 'Format ungültig.');
sfValidatorInteger::setDefaultMessage('invalid', '"%value%" ist keine Ganzzahl.');

Это прекрасно работает для sfValidatorBase, но не для, например, sfValidatorInteger. sfValidatorInteger по-прежнему показывает предустановленное сообщение по умолчанию '"%value% is not an integer.'.

Итак, я посмотрел на реализацию sfValidatorInteger::configure и выяснил, что она жестко задает сообщения об ошибках экземпляра:

protected function configure($options = array(), $messages = array())
{
  $this->addMessage('max', '"%value%" must be at most %max%.');
  $this->addMessage('min', '"%value%" must be at least %min%.');

  $this->addOption('min');
  $this->addOption('max');

  $this->setMessage('invalid', '"%value%" is not an integer.');
}

Я бы ожидал, что сообщения об ошибках читаются из карты сообщений по умолчанию, но, очевидно, это не так.

Итак, как я мог решить эту проблему чистым способом, предпочтительно, не касаясь исходного кода Symfony (так как мои изменения могут быть перезаписаны во время будущих обновлений)? Должен ли я получить все классы валидатора, чтобы обеспечить соответствующую реализацию configure? Ну, я так не думаю. Установка сообщений об ошибках для каждого экземпляра валидатора отдельно также не будет (чистой) опцией.

Может быть, я что-то не так понял относительно конфигурации этих валидаторов. Тогда более общий вопрос будет таким: Как установить сообщения об ошибках по умолчанию для различных классов валидаторов, таких как 'invalid' => '"%value%" ist keine Ganzzahl.' для sfValidatorInteger?

Заранее спасибо,
Flinsch.

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

Я бы создал свои собственные валидаторы, расширяющие стандартные Symfony, и использовал бы их.

1 голос
/ 01 февраля 2011

Я думаю, вы могли бы сделать это, используя файл перевода xliff.

<source>"%value%" is not an integer.</source>
<target>"%value%" n'est pas un entier.</target>
...