CakePHP saveAll 和验证

Posted

技术标签:

【中文标题】CakePHP saveAll 和验证【英文标题】:CakePHP saveAll and Validation 【发布时间】:2013-06-06 16:17:49 【问题描述】:

粉丝,

我尝试在数据库中保存多个条目。

例子:

index.ctp

echo $this->Form->create('Item');
echo $this->Form->input('0.Item.name');
echo $this->Form->input('1.Item.name');
echo $this->Form->end('save');

项目.php

class Item extends AppModel 
  var $validate = array(
    'name' => 'email'
  );

ItemsController.php

public function index() 
  if($this->request->is('post'))
    if($this->Item->saveAll($this->request->data))
        $this->Session->setFlash("saved successful");
      else
        $this->Session->setFlash("saving error");
        debug($this->Item->validationErrors);
      
  

当我尝试保存非电子邮件值时,我收到“保存错误”但输入字段没有消息。验证错误是:

array(
    (int) 0 => array(
        'name' => array(
            (int) 0 => 'This field cannot be left blank'
        )
    ),
    (int) 1 => array(
        'name' => array(
            (int) 0 => 'This field cannot be left blank'
        )
    )
)

谁能帮帮我?

编辑:

调试 $this->request->数据

array(

    (int) 0 => array(
        'Item' => array(
            'name' => 'test'
        )
    ),
    (int) 1 => array(
        'Item' => array(
            'name' => 'test2'
        )
    )
)

【问题讨论】:

通过调试显示 $this->request->data 中的内容 见上面的编辑@MoyedAnsari 【参考方案1】:

您可以尝试重新格式化您发布的数据并改用Model::saveMany()(参见documentation 和Field naming Conventions);

echo $this->Form->create('Item');
echo $this->Form->input('Item.0.name');
echo $this->Form->input('Item.1.name');
echo $this->Form->end('save');

而且,在控制器内部;

$this->Item->saveMany($this->request->data['Item']);

虽然,您现有的控制器代码应该也可以使用修改后的输入命名

未经测试(不在我的电脑后面),但值得一试:)

【讨论】:

以上是关于CakePHP saveAll 和验证的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 表单验证使用其他模型来验证和/或保存?

Cakephp SaveAssociated 和 Save - 使用相同的模型验证代码

CakePHP saveAll 和验证

CakePHP 模型验证无法正常工作

具有两个模型会话的 Cakephp 身份验证组件

CakePHP 2.2.1 - 在表单上显示 CakePHP 错误 - 自定义验证