【问题标题】:CakePHP - Prevent model data being save in a saveMany call when certain fields are blankCakePHP - 当某些字段为空时,防止模型数据保存在 saveMany 调用中
【发布时间】:2012-04-17 08:05:34
【问题描述】:

我有一个场景,通过 CakePHP 2.x 中的 saveAll 传递方法,我从一个表单中保存了 3 个不同的模型数据

表格上的模型是:

  1. 项目
  2. 项目图像
  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 操作一定不能失败,如果可能的话,它必须简单地不要尝试保存表单中的空白字段。

有什么建议吗?

亲切的问候, 西蒙

【问题讨论】:

    标签: cakephp cakephp-2.0


    【解决方案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']);
                    }
                }
            }
        }
    

    我希望有人发现这在某种程度上有用。

    亲切的问候, 西蒙

    【讨论】:

      猜你喜欢
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多