cakephp - 找出(在 Controller 中)哪个特定的验证规则失败

标签 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'),
    ),
);

在我的 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/

相关文章:

php - 将 Cake 1.3 迁移到 Cake 2.0

php - Cakephp 查找字段

php - Cakephp 从数据库中检索信息

cakephp - 如何使用 cakedc/users 在 cakephp 中实现 google oauth?

php - header 已在 CakePHP 应用程序中发送错误

php - CakePHP 1.3 如何有 2 个不同的登录页面和 2 个表

php - CakePHP 1.3 - where 子句中的未知列

javascript - 在 CakePHP 中使用 focus() 和 onload()

php - 使用 cakephp 输出标签?

php - Cakephp - 如何加密然后解密正在存储和从数据库检索的数据