

cakephp初心者です。  
cakephpのページネーションで表示するページを指定することは可能でしょうか。

以下のような処理を考えています。

１．ページネーションのある一覧フォームを表示。  
２．一覧フォームから選択したレコードの詳細フォームを表示。  
３．詳細フォームでレコードを更新し、一覧フォームへ戻る。  
４．一覧フォームを２の状態の時のページで表示する。

コントローラ側でページネーションのページを指定することは出来ないでしょうか。

以上、よろしくお願いいたします。


CC BY-SA 3.0
2017-07-17T07:18:00.717
36442
2017-07-18T02:51:19.537
19539
question
php cakephp
cakephp3のページネーションで表示するページを指定したい


> cakephpのページネーションで表示するページを指定することは可能でしょうか。

この質問に対しての回答は「はい」です。

今回の例で行けば、

> ３．詳細フォームでレコードを更新し、一覧フォームへ戻る。

の時のアクションメソッド内で、処理の完了時に行うリダイレクト先指定で、

[code]

    return $this->redirect(['action' => 'index', '?' => ['page' => 2]]);
    
[/code]

のようにして、ページ指定可能です。

* * *

ただし、ここで「どのページに戻るのか」を知る必要があります。indexアクションに検索などの機能を設けていた場合は、その検索オプションも引き継いで戻りたいですよね。

そのためには、

> １．ページネーションのある一覧フォームを表示。

のindexアクションで、セッションにクエリパラメーターを保存しておき、3のリダイレクト時に取り出すというやり方があります。

[code]

    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で読み込みと削除
            ]);
        }
        // ...
    }
    
[/code]

この手法の場合、複数のタブなどで別々の表示条件のindexを開いていた場合は、セッションに状態を保持している都合上、最後に開いたindexの表示条件で戻ることになりますので、その点だけ留意してください。


CC BY-SA 3.0
2017-07-18T02:51:19.537
36460
2017-07-18T02:51:19.537
2668
36442
answer