我有一个看起来像这样的视图文件:
<?php
echo $this->Form->create('ModelName');
echo $this->Form->input('ModelName.0.firstField');
echo $this->Form->input('ModelName.0.secondField');
echo $this->Form->input('ModelName.1.firstField');
echo $this->Form->input('ModelName.1.secondField');
echo $this->Form->end();
?>
我的问题是,如何验证这些数据?我没有保存,所以调用save或saveAll方法对我来说似乎没有意义。我只想在处理数据之前验证数据并将结果显示给用户。
目前使用的是:
<?php
if ($this->request->is('post')) {
$this->ModelName->set($this->request->data);
if ($this->ModelName->validates()) {
echo $this->Session->setFlash('Success');
} else {
echo $this->Session->setFlash('Failure');
}
}
?>
即使我输入肯定会失败的数据,它是否也会一直成功。 我也尝试过:
<?php
if ($this->request->is('post')) {
if ($this->ModelName->validateMany($this->request->data)) {
echo $this->Session->setFlash('Success');
} else {
echo $this->Session->setFlash('Failure');
}
}
?>
并且这一直在返回成功,但这可能是因为我不知道如何正确使用validateMany。
答案 0 :(得分:3)
Model::set
用于将单个数据集/记录分配给模型的当前实例。因此,您可能只验证POST数据中的第一组数据。您必须遍历POST数据中的每个记录,Model::set
将其复制到Model数据,然后调用Model::validates
。
不使用上述方法或Model::validateMany
,请尝试使用Model::saveAll
而不实际保存。
http://api20.cakephp.org/class/model#method-ModelsaveAll
validate:设置为false表示禁用验证,true表示在保存之前验证每条记录,“first”表示在保存任何记录之前验证所有记录(默认值),或“仅”表示仅验证记录,但不保存它们。
<?php
if ($this->request->is('post')) {
if ($this->ModelName->saveAll($this->request->data, array('validate' => 'only'))) {
echo $this->Session->setFlash('Success');
} else {
echo $this->Session->setFlash('Failure');
}
}
?>