找出(在控制器中)哪个特定验证规则失败

时间:2011-07-15 16:29:22

标签: cakephp cakephp-1.3

我有一个带有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等)......

4 个答案:

答案 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']