【问题标题】:how to validate multiple entries for same field in cakephp如何验证cakephp中同一字段的多个条目
【发布时间】:2015-12-28 06:39:59
【问题描述】:

是否有任何机构可以知道如何验证同一字段的多个条目。我需要验证数据并将其保存到数据库表中。我尝试使用我们通常用于验证数据的验证规则方法,但验证函数返回 1,即 True 而不是错误。此外,我将验证规则包含在一个额外的数组中,它不起作用。

请指导我验证多个条目的数据。

控制器代码

$this->MyModel->set($this->request->data);
if($this->MyModel->validates()){
   //Some code 
}else{
   pr($this->MyModel->validationErrors);
}

提交表单的输出:

Array
(
    [MyModel] => Array
        (
            [0] => Array
                (
                    [qualification_id] => 
                    [stream] => 
                    [pass_year] => 
                    [description] => 
                    [resume_id] => 1
                )
            [1] => Array
                (
                    [qualification_id] => 
                    [stream] => 
                    [pass_year] => 
                    [description] => 
                    [resume_id] => 1
                )

        )

)

MyModel 验证规则:

public $validate = array(
        array(
            'resume_id' => array(
            'notEmpty'=>array(
                'rule' => 'notEmpty',
                'message' => 'Invalid resume reference.'
            ),
            'numeric' => array(
                'rule' => 'numeric',
                'message' => 'Invalid resume reference.'
            )
        ),
        'qualification_id' => array(
            'notEmpty'=>array(
                'rule' => 'notEmpty',
                'message' => 'Please enter qualification.'
            ),
            'numeric' => array(
                'rule' => 'numeric',
                'message' => 'Invalide qualification selected'
            )
        )
        )
    );

谢谢,

C 段

【问题讨论】:

    标签: php validation cakephp model


    【解决方案1】:

    Model::validates() 只能处理一条以前用Model::set() 设置的记录。

    如果您想验证多条记录,您必须使用Model::validateMany()

    可以这样实现:

    $data = $this->request->data; //to prevent $this->request->data from being altered.
    if($validationErrors=$this->MyModel->validateMany($data)){
        //Some code 
    }else{
        pr($validationErrors);
    }
    

    请参阅 CakePHP 2.x API 中的 Model::validateMany()

    【讨论】:

    • 谢谢 Inigo,我试过这个 Model::validateMany() 但它不能验证我的数据。所以我重写了 Model::validateMany()。我将在这篇文章中更新我的答案。
    • 感谢 Inigo 这个答案在同样的情况下对我有帮助。
    【解决方案2】:

    我找到了解决方案,正如 Inigo Flores 所说,Model::validateMany() 是帮助已满,但在我的情况下,Model::validateMany() 不起作用。所以我已经覆盖了我模型中的方法

    型号代码:

    public function validateMany(&$data, $options = array()) {
            $validationErrors = array();
            foreach ($data[$this->alias] as $key => $values) {
                $this->set($values);
                if (!$this->validates($values)) {                
                    $validationErrors[$this->alias][$key] = $this->validationErrors;                
                    foreach ($this->validationErrors as $field => $msg) {
                        $validationErrors[$this->alias][$key][$field]['message'] = $msg[0];
                    }
                }
            }
            if (!empty($validationErrors)) {
                unset($this->validationErrors);
                $this->validationErrors = $validationErrors;
                return false;
            } else {
                return true;
            }
        }
    

    我使用 cakephp 的 $this->validates() 方法来验证每个数组

    每个表单域的 CTP 代码:

    <?php
    $isError = false;
    if (!empty($errors['MyModel'][$index]['qualification_id']['message'])) {
        $isError = true;
    }
    ?>
    <div class="col-lg-4<?php echo ($isError) ? ' error' : ''; ?>">
        <?php
        echo $this->Form->label(_('Qualification'));
        echo $this->Form->select('MyModel.' . $index . '.qualification_id', $qualifications, array('div' => false, 'required' => false, 'empty' => 'Please select', 'class' => 'form-control', 'maxlength' => 80));
        echo ($isError) ? '<span>' . $errors['MyModel'][$index]['qualification_id']['message'] . '</span>' : '';
        ?>
    </div>
    

    这是一个有点长的过程,但它解决了我的验证问题。

    谢谢, C段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      • 2018-03-24
      相关资源
      最近更新 更多