質問: Cakephpの質問です。バリデーションをしてエラーがあったときに戻るページを任意のページにできるのでしょうか? 具体的には、/blog/viewのページ内に/comment/addへPostするフォームを下記のように作成しました。 $form->create("Comment", array("action" => "add", "type" => "post")) (ブログ記事の下部にコメント欄があるイメージです) 値が正常ならcommentsコントローラのadd()で処理されDBに反映されましたが、エラー時には/comment/addに遷移してしまいました。 元の/blog/viewに戻したいのですが。方法はあるでしょうか?
回答: comments_controllerのaddアクションが実行されるのは確実なので、明示的に別なページに遷移したければ、そのようにしなければなりません。 手っ取り早いのは、フォームでエラー時の戻りURLをつけとくことでしょうか? こんな感じです。 view.ctp ``` .... create("Comment", array("action" => "add", "type" => "post")) $form->input('return_action', array('type' => 'hidden', 'value' => '/blog/view/' . $blog['Blog']['id'])); ?> .... ``` comments_controller.php ``` function add() { .... if (!$this->Comment->save($this->data)) { $this->redirect($this->data['return_action']); exit; } .... } ``` 明示的にフォームで渡していますが、Refererを見るというのもありかもしれません。 何かの参考になれば。