Я только что натолкнулся на проблему, которую, как я полагаю, представлял собой «баг» в структуре 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.