CakePHP中的saveAll验证错误

时间:2013-02-23 22:20:56

标签: validation cakephp

我有一个我一次保存的用户记录列表(表单是从上传的CSV中填充的)。

一切似乎都运行正常,我的验证规则很受尊重,但有一件事我不认识的是具体的验证错误信息。

我得到了一般验证错误(如果说,一个应该是唯一的字段不是),但我没有在特定字段上收到错误,让用户知道实际问题是什么。

这是一个错误,还是我的代码有问题?这是我的控制器的动作(fwiw我将CSV数据从另一个动作传递给此动作,因此在开头的代码段):

public function finalizeCsv() {
    if ( isset($this->request->params['named']['csvData']) ) {
        $csvData = unserialize( $this->request->params['named']['csvData'] );
    } else {
        $csvData = $this->request->data;
    }
    $this->set('users', $csvData);
    if ($this->request->is('get')) {
        $this->request->data = $csvData;
    }
    if ($this->request->is('post') || $this->request->is('put')) {
        if ($this->User->saveAll($this->request->data)) {
            $this->Session->setFlash('Users added!', 'default', array('class' => 'success'));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash('There were errors with your data.');
        }
    }
}

1 个答案:

答案 0 :(得分:1)

对于唯一字段,请添加验证规则

'field_name' => array(
    'rule' => 'isUnique',
    'required' => 'create'
),

下一步 - 当您收到错误消息时,您需要查看$this->User->validationErrors。里面会有很多数组 - 每个创建的记录都有1个。循环遍历它们,收集错误并将它们发送到$ this-> Session-> setFlash() 如果您正在使用InnoDB或其他支持事务的引擎,那么最好将$this->User->saveAll($this->request->data)包装到事务中。出错 - 执行回滚并重试。

$ds = $this->User->getDataSource();
$ds->begin();
// > saving here < //
$ds->commit(); //< on success
$ds->rollback(); //< on error