lxa*_*lxa 6 cakephp cakephp-1.3
我有一个用户注册表单,email其中包含作为用户名的字段,并且应该在整个应用程序中是唯一的.
User model具有以下是该字段的验证规则:
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'),
),
);
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我想检查它是否是'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();
Run Code Online (Sandbox Code Playgroud)
这将为您提供所有验证错误的数组.
更新(自定义验证规则):
因此,我们想检查它是否是电子邮件,如果它是唯一的 - 我们希望模型中包含以下规则:
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
Run Code Online (Sandbox Code Playgroud)
然后通过以下方式从控制器访问它:
Configure::read('UserValidationFail');
Run Code Online (Sandbox Code Playgroud)
哪个会给你'电子邮件'或'isUnique'.
您没有指出您正在使用哪个框架(看起来不像 CodeIgniter)。但是,如果 $this->User->validationErrors['email'] 返回一个简单的文本字符串,则您无能为力。
用户对象还有其他属性吗?打印它以查看里面的内容可能是个好主意。