我有一个场景,我通过CakePHP 2.x中的saveAll传递方法从一个表单中保存了3个不同的模型数据
表格上的模型是:
1和2完美保存,但我遇到了ProjectAttachment字段的问题。如果您查看下图,相关字段位于右下角,以红框突出显示:http://img.skitch.com/20120417-bnarwihc9mqm1b49cjy2bp13cf.jpg
情况如下:
我已将字段命名如下:* ProjectAttachment.0.project_id *, ProjectAttachment.0.name .... * ProjectAttachment.6.project_id * etc其中数字相对于已存在的用户已添加的附件数量,因为没有限制。因此,如果用户已经ALREADY添加了6个文档,则该字段将被称为 ProjectAttachment.7.id ,依此类推。这是因为使用saveAll方法时的命名约定。
我使用了两个隐藏字段,一个用于存储用户ID,另一个用于存储项目ID。
问题是如果用户没有填写文档标题并选择要上传的文件,则表单失败!如果我删除所有验证规则,表单不再失败但是插入了空白的ProjectAttachment记录。
我怀疑问题也可能是project_id和user_id字段(隐藏)已经包含值?
我考虑了一下,并提出了一个简单的概念:在我的控制器中,在saveAll调用之前,我会检查是否提交了一个空白的文档标题字段,如果是,我会完全删除相关的来自 $ this-> request-> data ['ProjectAttachment'] 数组的数组条目,但这似乎不起作用。
澄清一点,我不是在寻找验证规则。如果用户决定他们只想上传图片而不是触摸ProjectAttachment表单,那么saveAll操作一定不能失败,如果可能的话,必须简单地不要尝试保存表单中的空白字段。
有什么建议吗?
亲切的问候, 西蒙
答案 0 :(得分:0)
似乎解决方案比我原先想象的要简单得多!我部分在正确的轨道上,如果我遇到任何空白,我必须在 $ this-> request-> data 数组中取消设置变量 ProjectArray 键字段。
我这样做了如下:
if(!empty($this->request->data['ProjectAttachment'])){
foreach($this->request->data['ProjectAttachment'] as $key => $value){
if(is_array($value) && array_key_exists('upload_file', $value)){
if($value['upload_file']['name'] == ''){ // Blank document file
unset($this->request->data['ProjectAttachment']);
}
}
}
}
我希望有人发现这在某种形式或某种方面有用。
亲切的问候, 西蒙