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 データに渡してから、 を呼び出す必要があります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');
        }
    }
?>
于 2012-09-21T07:22:28.173 に答える