前提・実現したいこと
CakePHP3のModelで行うバリデーションとは別に、コントローラでバリデーションを行いたいと考えております。
親子関係のあるテーブルがあり、子は親に対して複数登録可能です。(テーブルは以下の通り)
parentsテーブル
id | maximum |
---|---|
1 | 100 |
2 | 200 |
childrenテーブル
id | parent_id | num |
---|---|---|
1 | 1 | 50 |
2 | 1 | 50 |
parents.maximumは、親に対して子が持てるnumの合計最大値となっており、numの合計値がmaximumを超えた時にエラーを発生させたいと考えております。
一つのアクションで親子両方更新する場合のバリデーションを想定しております。
ViewからPOSTした際の構造は以下の通りとなっております。
php
1{ 2 "maximum": 100, 3 "children": [ 4 { 5 "num": 50, 6 }, 7 { 8 "num": 50, 9 }, 10 ] 11} 12
発生している問題・エラーメッセージ
下記コードで、parents.maximumに対してはバリデーションエラーを追加することができたのですが、
php
1$parents->errors('maximum', 'エラーメッセージ');
以下の様に記載しても、$parents->errors()
自体に値は入るのですが、実際にViewではエラーが表示されておらず、子に対してエラーを追加する方法がわかりません。
php
1$parents->errors(['children' => [0 => ['num' => 'エラーメッセージ']]]);
上記コードを両方記載した時の$parents->errors()
のをデバッグした結果は以下です。
php
1Array 2( 3 [maximum] => Array 4 ( 5 [0] => エラーメッセージ 6 ) 7 8 [children] => Array 9 ( 10 [0] => Array 11 ( 12 [num] => Array 13 ( 14 [0] => エラーメッセージ 15 ) 16 ) 17 ) 18)
View側の記載に誤りは無いと考えており、その理由はChildrenTable
で定義した$validator
で発生したエラーはViewでも正常にエラーが表示されております。
お手数ではございますが、何卒よろしくお願いいたします。
ちなみにですが、モデル側で解決できる案でも構いません。
以上、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/27 10:16 編集
2018/09/27 10:35
2018/09/27 10:37
2018/09/27 11:08
2018/09/27 11:30
2018/09/27 13:34
2018/09/27 15:43