0

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

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

4

1 回答 1

3

Model::set用于将单个数据集/记录分配给模型的当前实例。因此,您可能只验证 POST 数据中的第一组数据。您将不得不遍历 POST 数据中的每条记录,将其遍历Model::set到模型数据,然后调用Model::validates.

代替上述方法 or Model::validateMany,尝试使用Model::saveAll而不实际保存。

http://api20.cakephp.org/class/model#method-ModelsaveAll

validate:设置为 false 以禁用验证,设置为 true 以在保存之前验证每条记录,“first”以在保存任何记录之前验证所有记录(默认),或“only”以仅验证记录,但不保存它们。

<?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');
        }
    }
?>
于 2012-09-21T07:22:28.173 回答