お世話になっております。
当方Laravel5.5にてWebSiteを構築しております、
環境はmac OS Mojave10.14.2
ブラウザはGoogle Chrome バージョン: 71.0.3578.98になります。
前提
データの検索結果画面(データがExcelの表のように一覧で見れる)
を実装しました。(Laravel5.5でpaginationもLengthAwarePaginatorにて実装済)
一覧上の各レコードには「詳細」リンクがあり、
詳細画面に移ることができます。
やりたいこと
下記⑧の通り、
詳細から一覧に戻る際、
元いた画面(検索済で、かつ、同じページ)に戻りたいです。
①検索をかける(キーワード:teratail)
②キーワードteratailを持つデータがヒットし一覧表示される
③一覧の2ページ目に移る
④2ページ目が表示される
⑤どのレコードかの詳細ボタンをクリックする
⑥詳細画面に移る
⑦戻るボタンをクリックする
⑧元いた④の画面に移る
考えたこと
詳細画面にキーワードと現在ページを渡し、戻ってくる時に
渡したキーワードを使用して再度検索、
元いたページ数をルーティングの機能の内のどこかに入れれば
できるのでは?と考えました。
しかし、元いたページ数を渡した後、どのように
そのページを指定して(どこに渡せば)
同じページに戻れるのかわからず困っています。
(元いた一覧ページは
http://localhost:XXXX/show_data?keyword=teratail&page=2
のようになっていますが、文字列結合でpage=2をurl指定して
遷移させるなど乱暴なことをしてはいけない気がしていて、(感覚ですが…)
踏み込めずにいます)
一覧画面のview(詳細リンク部分)
$data->currentPage()がページネーションの現在ページになります
php
1 <td style="width:80px; text-align:center;"><a href="{{ route('show_data_detail', ['keyword'=> $keyword,'previouspage'=>$data->currentPage()]) }}">詳細</a></td>
この後は、Controllerでリクエストから変数(keywordとpreviouspage)を取ってそのまま詳細画面に渡しています。
詳細画面のview(戻るボタン)
php
1 <form action="{{ route('show_data') }}" method="post"> 2 {{ csrf_field() }} 3 <input type="hidden" name="keyword" value='{{$keyword}}'> 4 <input type="hidden" name="previouspage" value='{{$previouspage}}'> 5 <button type="submit" class="btn-outline-success btn btn_flat"> 6 戻る 7 </button>
この後、一覧画面のコントローラーでは、keywordからデータベースの検索をして、
一覧を表示するようにしているので、
現在渡ってきたpreviouspageは使えていません。
ルーティング
php
1Route::get('/show_data', 'ShowdataController@show_data_searched')->name('show_data')->middleware('auth'); 2Route::post('/show_data', 'ShowcaseController@show_data_searched')->name('show_data')->middleware('auth'); 3Route::get('/show_data_detail', 'ShowdataController@show_data_detail')->name('show_data_detail')->middleware('auth'); 4
気になっていること
対象のページを初めて見た時や、
新しいページ、新しいタブで開いた時などは
直前に見たページを取得できないことが理由で、
url()->previous()を他のページ(データのアップロード画面など)で
使っていなかったため、今回も使用していません。
しかし、
そもそもurl()->previous()にエラーページを設定すれば問題ないので、
(参考:https://www.nyamucoro.com/entry/2018/05/09/200600)
前ページへの移動は上記の「考えたこと」の様に再検索など行わないのが普通、
であればご指摘頂けますとありがたいです。
追記(3/29 15:07)
paging後のデータのcurrentPageを
上書きしてviewに渡せればよいかと考え、
方法を検索しましたが、
LengthAwarePaginatorにて
(記載が漏れていたため前提項にも追記しました)
setcurrentPage()といったメソッドはない(※)ようで、
"overwrite current page laravel pagination"
"overwrite current page LengthAwarePaginator"
"LengthAwarePaginator method"
といったキーワードで検索するもなかなか方法がみつかりません。
※参考:https://laravel.com/api/5.0/Illuminate/Pagination/LengthAwarePaginator.html
宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/27 13:53
2019/03/27 21:31
2019/03/29 05:28
2019/03/29 05:58
2019/03/29 06:23
2019/03/29 07:18
2019/03/30 09:26 編集
2019/04/02 12:57
2019/07/16 06:29
2019/07/16 06:37