首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TakePHP2.x模型验证被调用两次

TakePHP2.x模型验证被调用两次
EN

Stack Overflow用户
提问于 2015-12-21 13:33:41
回答 1查看 585关注 0票数 1

当我试图在我的模型中验证来自控制器的数据时,错误会在invalidFields数组中发生两次,但是我不明白为什么。

这是我的密码:

代码语言:javascript
复制
<?php
App::uses('AppController', 'Controller');
App::import('Vendor','Excel');

class ServicedesksController extends AppController{
    public $uses = array("CustomerInformation");

    public function uploadData(){
    $this->layout = 'index';

    if($this->request->is('post')){ 
        $safeData = array('name' => 'testkun', 'kkz' => 'bae');
        $this->CustomerInformation->set($safeData);
        if($this->CustomerInformation->validates()){
            print_r("successful");
        }else{
            print_r($this->CustomerInformation->invalidFields());
            print_r("not successful");
        }
    }

}

这是我的模型代码:

代码语言:javascript
复制
<?php

class CustomerInformation extends AppModel{
    public $validate = array(
        'name' => array(
             'rule' => array('minLength', '8'),
             'message' => 'Minimum length of 8 is required'
         ),
         'kkz' => array(
             'rule-1' => array(
                 'rule' => '/^[A-Z]{3}$/i',
                 'message' => 'Only letters allowed'
             ),
             'rule-2' => array(
                 'rule' => 'checkDuplicate',
                 'message' => 'There is still an existing entry for this kkz',
                 'last' => false

             )
         )
     );

     public function checkDuplicate($check){
        $existingCount = $this->find('count', array(
             'conditions' => $check
        ));
        return $existingCount == 0;

    }
}

执行uploadData时,invalidFields包含

代码语言:javascript
复制
Array ( 
    [name] => Array ( 
        [0] => Minimum length of 8 is required 
        [1] => Minimum length of 8 is required 
)

为什么我犯了两次这个错误?我已经尝试重命名字段,减少验证规则,并使用不同的模型和控制器/控制台进行测试。但所有人都有相同的行为。

我找不到关于这件事的任何错误报告。如果有人能帮我,我会很高兴的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-21 13:55:25

从食谱上看:

validates方法调用invalidFields方法,该方法填充模型的validationErrors属性。结果,invalidFields method还返回该数据:

代码语言:javascript
复制
$errors = $this->ModelName->invalidFields(); // contains validationErrors array

验证错误列表在对invalidFields()的连续调用之间没有清除。因此,如果您在循环中进行验证,并且希望单独地执行每一组错误,则不要使用invalidFields()。相反,使用validates()并访问validationErrors模型属性。

因此,你应该打电话给:

代码语言:javascript
复制
print_r($this->CustomerInformation->validationErrors);

而不是

代码语言:javascript
复制
print_r($this->CustomerInformation->invalidFields());

验证来自控制器的数据

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34396947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档