【问题标题】:Cake PHP 2.x Model validation is called twiceCake PHP 2.x 模型验证被调用两次
【发布时间】:2015-12-21 13:33:41
【问题描述】:

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

这是我的代码:

<?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");
        }
    }

}

这是我的模型代码:

<?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 包含

Array ( 
    [name] => Array ( 
        [0] => Minimum length of 8 is required 
        [1] => Minimum length of 8 is required 
)

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

我找不到任何关于此的错误报告。如果有人可以帮助我,我会很高兴。

【问题讨论】:

    标签: validation cakephp model controller cakephp-2.x


    【解决方案1】:

    来自食谱:

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

    $errors = $this->ModelName->invalidFields(); // contains validationErrors array
    

    在对invalidFields() 的连续调用之间不会清除验证错误列表。因此,如果您在循环中进行验证,并且希望单独设置每组错误,请不要使用invalidFields()。而是使用 validates() 并访问 validationErrors 模型属性。

    因此,您应该调用:

    print_r($this->CustomerInformation->validationErrors);
    

    而不是

    print_r($this->CustomerInformation->invalidFields());
    

    Validating Data from the Controller

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 2014-07-12
      相关资源
      最近更新 更多