皆さんお疲れ様です。
先日から何度もcakephp関連の質問に対して丁寧にお答えしていただきありがとうございます。
今回はすごく具体的なことをお聞きします。
質問が長くなり、見えにくいかとは思いますがご容赦ください。
私のcakephpはversion2.6.4です。
今現在、cakephpにtry catch文を用いて例外処理をしようとしています。
しかし、正直まだ例外処理をどこに書いたらよいのかもあまり理解できておりません。
バリデーションは書いていますが、これでよいのかさえ正直わかりません。
目星として、データを扱うcontroller内に書けばよいのかなとあたりをつけています。
以下コードです。
php
1public function index() { 2 3 //Reportコレクションに対するバリデーション-------------------------------------- 4 $this->Report->set($this->request->data); 5 if ($this->Report->validates()) { 6 //正しい場合のロジック 7 } else { 8 //正しくない場合のロジック 9 $errors = $this->Report->validationErrors; 10 } 11 12 //Requestコレクションに対するバリデーション------------------------------------- 13 $this->Request->set($this->request->data); 14 if ($this->Request->validates()) { 15 //正しい場合のロジック 16 } else { 17 //正しくない場合のロジック 18 $errors = $this->Request->validationErrors; 19 } 20 21 //queryのidを元にreportのオブジェクトを取得------------------------------------- 22 $reportId = $this->request->query['id']; 23 24 $report = $this->Report->find('all', array('conditions' => array("id" => $reportId)));//そのreportsの中にあるさっきのidがあるドキュメントの情報を取得 25 $report_obj = $report[0]["Report"]; 26 27 //ReportsCollectionから変数をセット------------------------------------------- 28 $userid = $report_obj["userObjectId"]; 29 $requestId = $report_obj["requestId"]; 30 $reason = $report_obj["reason"]; 31 $message = htmlspecialchars($report_obj["message"]); 32 $comment = $report_obj["comment"]; 33 $reportstatus = $report_obj["status"]; 34 $modified = $report_obj["modified"]->toDateTime()->format('Y-m-d H:i:s'); 35 $created = $report_obj["created"]->toDateTime()->format('Y-m-d H:i:s'); 36 37 //report_objのrequestIdから該当するオブジェクトを取得---------------------------- 38 $request = $this->Request->find('all', array('conditions' => array("id" => $requestId)));//先ほどのrequestIdがあるrequestsの中のドキュメントを取得 39 $request_obj = $request[0]["Request"]; 40 41 //RequestsCollectionから変数をセット------------------------------------------ 42 $imagepath = $request_obj["imagePath"]; 43 $requeststatus = $request_obj["status"]; 44 45 //ビューに変数を引き渡す------------------------------------------------------- 46 $this->set(compact("reportId", "userid", "requestId", "reason", "message", "comment", "reportstatus", "modified", "created", "imagepath", "requeststatus")); 47 $this->set('imagehost', IMAGEPATH); 48 } 49
このpublic function indexでは主に変数を決めてviewに渡しているだけなので、バリデーションしか書いておりません。もしここでも例外処理を書く必要があればどこにどう書けばよいのか教えていただきたいです。
次はpublic function updateです
php
1 public function update(){ 2 3 //Reportコレクションに対するバリデーション-------------------------------------- 4 $this->Report->set($this->request->data); 5 if ($this->Report->validates()) { 6 //正しい場合のロジック 7 } else { 8 //正しくない場合のロジック 9 $errors = $this->Report->validationErrors; 10 } 11 12 //Requestコレクションに対するバリデーション------------------------------------- 13 $this->Request->set($this->request->data); 14 if ($this->Request->validates()) { 15 //正しい場合のロジック 16 } else { 17 //正しくない場合のロジック 18 $errors = $this->Request->validationErrors; 19 } 20 21 $this->autoRender = false; 22 //処理状態の更新-------------------------------------------------------------- 23 24 if(isset($this->request->data['report_status'])){ 25 $reportId = $this->request->data['report_id']; 26 $report = $this->Report->find('all', array('conditions' => array("id" => $reportId)));//そのreportsの中にあるさっきのidがあるドキュメントの情報を取得 27 $report_obj = $report[0]["Report"]; 28 $report_obj["status"] = $this->request->data['report_status']; 29 $report_obj["modified"] = array('modified' => date('Y-m-d H:i:s')); 30 $data = $report_obj; 31 $this->Report->save($data); 32 33 $this->redirect($_SERVER['HTTP_REFERER']); 34 } 35 //表示状態の更新-------------------------------------------------------------- 36 37 if(isset($this->request->data['request_status'])){ 38 $requestId = $this->request->data['request_id']; 39 $request = $this->Request->find('all', array('conditions' => array("id" => $requestId)));//そのreportsの中にあるさっきのidがあるドキュメントの情報を取得 40 $request_obj = $request[0]["Request"]; 41 $request_obj["status"] = $this->request->data['request_status']; 42 $data = $request_obj; 43 $this->Request->save($data); 44 45 $reportId = $this->request->data['report_id']; 46 $report = $this->Report->find('all', array('conditions' => array("id" => $reportId)));//そのreportsの中にあるさっきのidがあるドキュメントの情報を取得 47 $report_obj = $report[0]["Report"]; 48 $report_obj["modified"] = array('modified' => date('Y-m-d H:i:s')); 49 $data = $report_obj; 50 $this->Report->save($data); 51 52 $this->redirect($_SERVER['HTTP_REFERER']); 53 } 54 //コメントの更新-------------------------------------------------------------- 55 56 if(isset($this->request->data['report_comment'])){ 57 $reportId = $this->request->data['report_id']; 58 $report = $this->Report->find('all', array('conditions' => array("id" => $reportId)));//そのreportsの中にあるさっきのidがあるドキュメントの情報を取得 59 $report_obj = $report[0]["Report"]; 60 $report_obj["comment"] = $this->request->data['report_comment']; 61 $report_obj["modified"] = array('modified' => date('Y-m-d H:i:s')); 62 $data = $report_obj; 63 $this->Report->save($data); 64 65 $this->redirect($_SERVER['HTTP_REFERER']); 66 } 67 }
こちらではDBのフィールド3つに対してpostしています。
saveがあるのでこの部分に例外処理を書かなければいけないだろうとは思うのですが、
function自体に対して例外処理をかけるのか、それとも$this->Report->save();のところだけにかけるのかを教えていただきたいです。
1つとっかかりがわかればだいたいできると思うのですがとっかかりすらない状態なのでなんとか教えていただきたいです。宜しくお願い致します。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/05 16:47
2015/08/05 23:32