CakePHP saveAll和Validation

时间:2013-06-06 16:17:50

标签: validation cakephp save

风扇,

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

示例:

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');

Item.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);
      }
  }
}

当我尝试保存非电子邮件值时,我收到“保存错误”,但没有输入字段的消息。 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-> data

array(

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

1 个答案:

答案 0 :(得分:1)

您可以尝试重新格式化发布的数据并使用Model::saveMany()代替documentationField 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']);

尽管如此,您现有的控制器代码应该可以使用修改后的输入命名

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