indexgo
login

Laravel・Lumenで元いたページ番号のページに戻る方法

Laravel・Lumenでページング処理をしている一覧から何かの処理をいれた後に、元いたページに戻したい時の方法を考えて見たのでまとめました。やり方次第では、ページ番号だけでなくても使えるかもしれません。

作成者:Ssさん 公開日:2018年9月04日 10時33分 更新日:2018年9月04日 10時33分

結論から言うとredirect()->route()でgetパラメータを渡すだけです

return redirect()->route('PostsList', ['page' => $request->get('page')]);

これだけです。分かる方はこれで完了です。

それでは、詳しく見ていきましょう。

処理の流れは以下の通りです。

(1) ページング付き一覧ページを表示
(2) 何かDBの処理をするページを表示
(3) 元々いたページ(処理(1)のところ)に戻す

(1) 一覧のformにpage番号を仕込む @ビュー

まずは、コントローラからViewに変数で渡します。

page番号は、Eloquentのpaginateを使っていれば、$request->input('page')で取得できます。

view側ではformかリンクに仕込んでおきます。今回は、$pageという変数でコントローラからViewにページ番号を渡し、formに仕込んでおきます。

<form action="{{route('PostDelete', ['post_id'=>$r->id])}}" method="post">
    <input type="hidden" name="page" value="{{$page}}">
    <button type="submit">削除</button>
</form>

(2) 処理をする @コントローラ

更新やら、削除やら処理をします。

(3) 処理後にリダイレクトする @コントローラ

処理メソッド側(今回ではPostDeleteというルート名でルーティングされているメソッド)には、getリクエストで元々いたページのページ番号が渡されているので、そのままリダイレクトでページ番号を渡します。

class PostsController extends Controller
{
    public function delete(Request $request){
        //何かの処理

        return redirect()->route('PostsList', ['page' => $request->get('page')]);
    }
}

これで何かの処理をした後に、一覧へ戻したい時に、元々のページ番号のページに戻せました。