0

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

一切似乎都运行良好,并且我的验证规则得到了遵守,但是让我无法理解的一件事是特定的验证错误消息。

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

这是一个错误,还是我的代码有问题?这是来自我的控制器的操作(我将 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.');
        }
    }
}
4

1 回答 1

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
于 2013-02-28T09:29:06.290 回答