验证具有相同名称的多个字段

时间:2012-09-21 06:58:20

标签: cakephp cakephp-2.1

我有一个看起来像这样的视图文件:

<?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。

1 个答案:

答案 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');
        }
    }
?>