【问题标题】:How to "effectively" set default error messages of sfValidatorInteger etc.?如何“有效”设置 sfValidatorInteger 等的默认错误消息?
【发布时间】:2011-01-31 10:37:02
【问题描述】:

我刚刚遇到一个问题,我认为这是 symfony 框架的某种“错误”:我想为不同类型的验证器设置默认错误消息(例如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 实现吗?嗯,我不这么认为。分别为每个验证器实例设置错误消息也不是(干净)选项。

也许我对它们的验证器配置有误。然后,一个更普遍的问题是:如何为不同的验证器类设置默认错误消息,例如 'invalid' => '"%value%" ist keine Ganzzahl.'sfValidatorInteger

提前致谢,
弗林施。

【问题讨论】:

    标签: symfony1 symfony-1.4 symfony-forms


    【解决方案1】:

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

    【讨论】:

    • 谢谢!这确实是我现在所做的。由于我只使用了几个不同的验证器,因此付出的努力得到了回报。进一步的优势:我通常可以使用我最喜欢的设置“在课堂上”而不是“按实例”配置它们。
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的建议。我必须在哪里放置这个具体的 xliff 文件?据我了解,xliff 翻译需要使用 __("String to be translated") 才能工作。但是sfValidatorInteger里面没有__()
    • 我在 sfWidgetFormSchemaFormatter 中看到了一些翻译调用,调用了错误,所以我想它应该可以正常工作。您应该将此文件放在应用程序的 i18n 文件夹中。 (apps/yourApp/i18n)
    • 我不知道如何实现这一点。那些特定于应用程序的 xliff 文件似乎只适用于我自己对 __() 的使用,不适用于其他库中的那些。此外,我必须为每个应用程序创建几个 xliff 文件。在我看来,这不是一种“干净”的方式。但我谢谢你。无论如何,您的建议很有帮助。
    猜你喜欢
    • 2021-01-15
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 2017-03-09
    • 2018-12-01
    相关资源
    最近更新 更多