プロジェクトの 1 つに CakePHP 2.1.3 を使用しています。モデルの検証エラーをコントローラー経由で JSON 形式で返す必要があります。モデルに検証エラーがあります。ただし、プライマリ モデルが有効で、関連付けられているモデルに検証エラーがある場合、無効な検証エラー配列が生成されます。以下に例を示します。
if ($this->request->is('post') || $this->request->is('put')) {
if ($this->PrimaryModel->saveAll($this->request->data, array('validate' => 'first'))) {
echo json_encode(array('success' => true));
} else {
$errors=array();
$tablesToModels=$this->PrimaryModel->tableToModel; //List of table names included in the model description. Used for associations.
foreach($tablesToModels as $tabel => $model) {
$errors[$model]=$this->{$model}->validationErrors;
}
pr($errors);
//echo json_encode(array('errors' => $errors));
}
exit;
}
プライマリ モデルと関連モデルに検証エラーがある場合、上記のコードの結果は次のようになります。
Array
(
[PrimaryModel] => Array
(
[field1] => Array
(
[0] => notempty
)
)
[AssociatedModel] => Array
(
[field1] => Array
(
[0] => notempty
)
[field2] => Array
(
[0] => notempty
)
)
)
すべてのフィールドがプライマリ モデルに入力されている場合、またはプライマリ モデルに検証エラーがない場合は、次のエラー配列が返されます。
Array
(
[PrimaryModel] => Array
(
[AssociatedModel] => Array
(
[field1] => Array
(
[0] => notempty
)
[field2] => Array
(
[0] => notempty
)
)
)
[AssociatedModel] => Array
(
[field1] => Array
(
[0] => notempty
)
[field2] => Array
(
[0] => notempty
)
)
)
なぜこれが起こっているのか、どこで間違っているのかわかりませんか?
整理するために必要な場合に備えて、編集フォームのコードを次に示します。
<php
echo $this->Form->input('PrimaryModel.field1');
echo $this->Form->input('PrimaryModel.field2');
echo $this->Form->input('PrimaryModel.field3');
echo $this->Form->input('PrimaryModel.field4');
echo $this->Form->input('AssociatedModel.field1');
echo $this->Form->input('AssociatedModel.field2');
echo $this->Form->input('AssociatedModel.field3');
echo $this->Form->input('PrimaryModel.field5');
?>
よろしくお願いします:)