如何“有效”设置sfValidatorInteger等的默认错误消息?

时间:2011-01-31 10:37:03

标签: symfony1 symfony-1.4 symfony-forms

我刚刚发现了一个问题,我认为它是某种symfony框架的'bug':我想为不同类型的验证器设置默认错误消息(例如sfValidatorInteger)。为此,在我的ProjectConfiguration::setup方法中,我有:

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

这适用于sfValidatorBase,但不适用于sfValidatorIntegersfValidatorInteger仍会显示预设的默认消息'"%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实现吗?好吧,我不这么认为。分别为每个验证器实例设置错误消息也是no(clean)选项。

也许我对这些验证器的配置有些不对劲。然后,一个更一般的问题是:如何为'invalid' => '"%value%" ist keine Ganzzahl.'的{​​{1}}等不同的验证器类设置默认错误消息?

提前致谢,
Flinsch。

2 个答案:

答案 0 :(得分:1)

我认为您可以使用xliff翻译文件来完成此操作。

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

答案 1 :(得分:1)

我会创建自己的验证器来扩展默认的Symfony并使用它们。