我有一个用户注册表,其中包含 email
作为用户名的字段,在整个应用程序中应该是唯一的。User
模型具有以下是该字段的验证规则:
var $validate = array(
'email' => array(
'email' => array('rule' => 'email', 'allowEmpty' => false, 'last' => true, 'message' => 'Valid email address required'),
'unique' => array('rule'=> 'isUnique', 'message' => 'Already exists'),
),
);
在我的 Controller 中,我想检查它是否是
'unique'
失败的规则(显示不同的表单元素,如“发送密码恢复电子邮件”按钮)。我可以检查是否
email
字段是否有效( if (isset($this->User->validationErrors['email']))
),但 如何检查特定规则失败 ?寻找特定的错误消息,如
if ($this->User->validationErrors['email'] == "Already exists")
只是看起来不对(l10n 等)...
最佳答案
阅读 http://book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller.html
基本上你只需要使用:
$errors = $this->ModelName->invalidFields();
这将为您提供所有验证错误的数组。
更新(自定义验证规则):
所以我们想检查它是否是一封电子邮件,以及它是否是唯一的——我们希望模型中有以下规则:
CakePHP 验证:http://book.cakephp.org/2.0/en/models/data-validation.html
在每个人的“返回假”之前,我们需要在某处设置此验证规则失败。最简单的方法:我们可以打破 MVC 约定,使用配置类( http://book.cakephp.org/view/924/The-Configuration-Class )并将其设置在那里,并在 Controller 中相应地访问它。
Configure::write('UserValidationFail','email'); //for email before return false
Configure::write('UserValidationFail','isUnique'); //for unique before return false
然后通过以下方式从 Controller 访问它:
Configure::read('UserValidationFail');
这会给你“电子邮件”或“isUnique”。
关于cakephp - 找出(在 Controller 中)哪个特定的验证规则失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6710202/