【问题标题】:Add domain string to validation messages in CakePHP models将域字符串添加到 CakePHP 模型中的验证消息
【发布时间】:2012-03-20 08:53:24
【问题描述】:

是否可以在 CakePHP 模型的验证消息中添加域字符串?我已将所有消息本地化为 __d():

echo __d('my_app_name', 'This is a regular message');

但模型中的验证消息是纯字符串或sprintf 参数:

'my_field' => array(
  'my_rule' => array(
    'rule' => 'alphanumeric',
    'message' => 'Only letters and numbers allowed',
  )
)

'another_field' => array(
  'another_rule' => array(
    'rule' => 'alphanumeric',
    'message' => ('Only %s and %s allowed', 'letters', 'numbers'),
  )
)

谢谢!!!

【问题讨论】:

    标签: validation cakephp localization model internationalization


    【解决方案1】:

    假设您使用的是 CakePHP 2.x:

    Cake 的Model 类有一个属性validationDomain,你可以添加

    public $validationDomain = "yourdomain";

    你的模型得到你想要的。

    来自 API 的信息:

    验证域(字符串)

    翻译验证错误时要使用的验证字符串域的名称。

    http://api20.cakephp.org/class/model

    【讨论】:

      【解决方案2】:

      您是否考虑过更改model 的validationDomain 属性? (已编辑:我刚刚注意到@Nappo 提出了这个建议)

      或者,如果这对您来说不够灵活,您可以在模型中覆盖 CakePhp 的 invalidate() 函数,如下所示:

      /**
       * Overrides Model.php's invalidate function
       */
      public function invalidate($field, $value = true) {
        if (is_string($value)) {
          return parent::invalidate($field, __d('my_app_name', $value));
        }
        else {
          return parent::invalidate($field);
        }
      }
      

      您可以将其放入您的 AppModel 或您希望更改消息的特定模型中。

      【讨论】:

      • 错过了 validationDomain 属性 :( 它对我有用。无论如何谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多