我有一个我一次保存的用户记录列表(表单是从上传的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.');
}
}
}
答案 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