将域字符串添加到CakePHP模型中的验证消息

时间:2012-03-20 08:53:25

标签: validation cakephp localization model internationalization

是否可以在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'),
  )
)

感谢!!!

2 个答案:

答案 0 :(得分:2)

假设你正在使用CakePHP 2.x:

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

public $validationDomain = "yourdomain";

到您的模型,以获得您想要的。

来自API的信息:

  

ValidationDomain(string)

     
    

转换验证错误时使用的验证字符串域的名称。

  

请参阅http://api20.cakephp.org/class/model

答案 1 :(得分:1)

您是否考虑过更改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或您希望更改消息的特定模型中。