- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:cakephpで手動でバリデーションを行う方法)
cakephpで手動でバリデーションを行う方法
このQ&Aのポイント
- cakephpで手動でバリデーションを行う方法についての質問です。サービス内で情報を登録する機能があり、複数ページで情報を入力していきます。最後の確認ページでそれまでの情報を表示し、[登録]ボタンをクリックすると情報をDBに登録します。しかし、アソシエーション先のテーブルの検証が行われないため、バリデーションを手動で行う際にアソシエーション先を含めて検証する方法を知りたいです。
- cakephpで手動でバリデーションを行う際、アソシエーション先のテーブルの検証ができないという問題があります。現在の仕組みでは、ページ遷移ごとにModelのvalidates()メソッドを使用して手動で検証を行っていますが、このメソッドではアソシエーション先のテーブルの検証が行われません。他に効果的な解決策があるかどうか知りたいです。
- 現在、cakephpでWEBサービスを開発しており、情報の登録機能の実装について悩んでいます。複数のページで情報を入力し、最後の確認ページで情報を表示して登録する仕組みです。しかし、手動でバリデーションを行う際にアソシエーション先のテーブルの検証が行えないことが課題です。他に有効な解決策があれば教えていただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
構成がよくわからないので答えづらいのですが、 アソシエーション先のModelを呼び出してきてソレのvalidatesメソッドも叩けば良いのではないでしょうか。 アソシエーション先のデータも含めて保存してくれるsaveAssociatedメソッドの中身も、それぞれのvalidatesメソッドを叩いているだけだったと思います。 $this->YourModel->set($data); $this->YourModel->validates(); $this->YourModel->AssociatedModel->set($data); $this->YourModel->AssociatedModel->validates();
その他の回答 (1)
- hue2011
- ベストアンサー率38% (2801/7250)
回答No.2
cake2の話ですね。cake1とは互換性がありませんので、版数を明確にして質問されたほうがいいと思います。 cake2の話としてお答えします。 validateは、ruleに関数名を設定できるのをご存じでしょうか。 その関数は、model内に定義してください。
質問者
お礼
お礼が遅くなり申し訳ありません。 ご回答有難うございました。
お礼
お礼が遅くなり申し訳ありません。 なるほど、モデルのオブジェクトのメンバーからアソシエーションしているモデルをたどってset()→validates()を実行するということですね。 それでももちろん良いのですが、そこらへんの処理がどこかのメソッドにまとまっていないかと思い、質問させていただいた次第です。 ただ、モデル側のsaveAssociatedでお教えいただいたような方法で検証しているということは、自分の希望を叶えるには独自にメソッド化しないといけないようですね。。。