CakePHP - 当某些字段为空时,防止模型数据保存在 saveMany 调用中
Posted
技术标签:
【中文标题】CakePHP - 当某些字段为空时,防止模型数据保存在 saveMany 调用中【英文标题】:CakePHP - Prevent model data being save in a saveMany call when certain fields are blank 【发布时间】:2012-04-17 08:05:34 【问题描述】:我有一个场景,通过 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* 等,其中的数字与已经存在用户添加的附件数量,因为没有限制。因此,如果用户已经添加了 6 个文档,则该字段将被称为 ProjectAttachment.7.id 等等。这是因为使用 saveAll 方法时的命名约定。
我使用了两个隐藏字段,一个用于存储用户 ID,另一个用于存储项目 ID。
问题是如果用户没有填写Document Title并选择一个文件上传,表单会失败!如果我删除所有验证规则,表单将不再失败,但会插入空白 ProjectAttachment 记录。
我怀疑问题也可能是 project_id 和 user_id 字段(隐藏的)已经有值了?
我想了想,想出了一个简单的概念:在我的控制器中,在调用 saveAll 之前,我会检查是否提交了空白的 Document Title 字段,如果是,我将完全消除相关的$this->request->data['ProjectAttachment'] 数组中的数组条目,但这似乎不起作用。
为了澄清,我不是在寻找验证规则。如果用户决定他们只想上传图像而不是触摸 ProjectAttachment 表单,那么 saveAll 操作一定不能失败,如果可能的话,它必须简单地不要尝试保存表单中的空白字段。
有什么建议吗?
亲切的问候, 西蒙
【问题讨论】:
【参考方案1】:看来解决方案比我最初想象的要简单得多!我部分正确,如果遇到任何空白字段,我必须取消设置 $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']);
我希望有人发现这在某种程度上有用。
亲切的问候, 西蒙
【讨论】:
以上是关于CakePHP - 当某些字段为空时,防止模型数据保存在 saveMany 调用中的主要内容,如果未能解决你的问题,请参考以下文章