質問: cakephp初心者です。 cakephpのページネーションで表示するページを指定することは可能でしょうか。 以下のような処理を考えています。 1.ページネーションのある一覧フォームを表示。 2.一覧フォームから選択したレコードの詳細フォームを表示。 3.詳細フォームでレコードを更新し、一覧フォームへ戻る。 4.一覧フォームを2の状態の時のページで表示する。 コントローラ側でページネーションのページを指定することは出来ないでしょうか。 以上、よろしくお願いいたします。
回答: > > cakephpのページネーションで表示するページを指定することは可能でしょうか。 > > > この質問に対しての回答は「はい」です。 今回の例で行けば、 > > 3.詳細フォームでレコードを更新し、一覧フォームへ戻る。 > > > の時のアクションメソッド内で、処理の完了時に行うリダイレクト先指定で、 ``` return $this->redirect(['action' => 'index', '?' => ['page' => 2]]); ``` のようにして、ページ指定可能です。 ただし、ここで「どのページに戻るのか」を知る必要があります。indexアクションに検索などの機能を設けていた場合は、その検索オプションも引き継いで戻りたいですよね。 そのためには、 > > 1.ページネーションのある一覧フォームを表示。 > > > のindexアクションで、セッションにクエリパラメーターを保存しておき、3のリダイレクト時に取り出すというやり方があります。 ``` public function index() // 一覧 { // ... $this->request->session() ->write('ControllerName.index.query', $this->request->getQuery()); // セッションキー名は適宜変更 } public function edit() // 詳細フォーム { // ... if (/* ... */) { // 処理が正常完了したときのリダイレクト return $this->redirect([ 'action' => 'index', '?' => $this->request->session() ->consume('ControllerName.index.query'), // consumeで読み込みと削除 ]); } // ... } ``` この手法の場合、複数のタブなどで別々の表示条件のindexを開いていた場合は、セッションに状態を保持している都合上、最後に開いたindexの表示条件で戻ることになりますので、その点だけ留意してください。