我有一个带有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'),
),
);
在我的控制器中,我想检查是否是失败的'unique'
规则(显示不同的表单元素,如“发送密码恢复电子邮件”按钮)。
我可以检查email
字段是否有效(if (isset($this->User->validationErrors['email']))
),但如何检查特定规则失败?
查找if ($this->User->validationErrors['email'] == "Already exists")
之类的特定错误消息似乎不对(l10n等)......
答案 0 :(得分:6)
阅读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
在每个“返回false”之前,我们需要设置此验证规则失败的地方。最简单的方法:我们可以破坏MVC约定,并使用配置类(http://book.cakephp.org/view/924/The-Configuration-Class)并将其设置在那里,并在控制器中相应地访问它。
Configure::write('UserValidationFail','email'); //for email before return false
Configure::write('UserValidationFail','isUnique'); //for unique before return false
然后通过以下方式从控制器访问它:
Configure::read('UserValidationFail');
哪个会给你'email'或'isUnique'。
答案 1 :(得分:0)
您没有指出您正在使用哪个框架(看起来不像CodeIgniter)。但是,如果$ this-> User-> validationErrors ['email']返回一个简单的文本字符串,那么你可以用它做的不多。
用户对象是否有任何其他属性?打印它可能是一个好主意,看看里面是什么。
答案 2 :(得分:0)
帖子上有Cakephp标签。不要验证来自控制器的数据,总是尝试在模型中执行此操作,而是将其推送到控制器和查看器......
答案 3 :(得分:0)
嗯,invalidFields()包括字段和错误消息。您可以通过错误消息猜测规则,对吗?
编辑:可以这样做:
$this->User->validationErrors['email'] == $this->User->validate['email']['unique']['message']