2

我刚刚遇到一个问题,我认为这是 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.'for sfValidatorInteger

在此先感谢,
弗林施。

4

2 回答 2

1

我认为你可以使用 xliff 翻译文件来做到这一点。

<source>"%value%" is not an integer.</source>
<target>"%value%" n'est pas un entier.</target>
于 2011-01-31T22:09:25.630 回答
1

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

于 2011-02-02T16:54:03.760 回答