【问题标题】:Validating multiple fields with the same name验证具有相同名称的多个字段
【发布时间】:2012-09-21 06:58:19
【问题描述】:

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

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

【问题讨论】:

    标签: cakephp cakephp-2.1


    【解决方案1】:

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

    不要使用上述方法或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');
            }
        }
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 2014-03-20
      • 2012-02-09
      • 2017-03-03
      相关资源
      最近更新 更多