Q&A
実現したいこと
Laravelにて、ページネーションのページ番号に加えてボタンに指定した値をコントローラーに渡したいと思います。
前提
ページネーションしたページにボタンを配置して、ボタンを押すとそのボタンに指定された条件にてDBから選択し、結果を表示するページを作成しています。
- 最初にページを開いたときは、全件検索し、ページネーションした結果が表示されてます(引数はなし)。
- そのページにはいくつかのボタンを配置します(ボタンは、同じカラムから選択して絞るための条件を指定する)。
- ボタンを押すことでURLにpageと、ボタンに割り当てた条件を設定します。
- 同じページに条件を絞った結果を表示します。
発生している問題
URLに渡す引数をどのように記述したらいいのでしょうか。
URLの例(図の「2」をクリックしたとき)
https://192.168.xxx.xxx/books?page=2?kd=b
(下記のソースコードの場合に渡したい引数を示します)
該当のソースコード
books.blade.php
1 {{ Form::open(['method' => 'get']) }} 2 <div> 3 {{ Form::button('a', ['class' => 'btn', 'name' => 'kd', 'value' => 'a', 'type' => 'submit']) }} 4 {{ Form::button('b', ['class' => 'btn', 'name' => 'kd', 'value' => 'b', 'type' => 'submit']) }} 5 {{ Form::button('c', ['class' => 'btn', 'name' => 'kd', 'value' => 'c', 'type' => 'submit']) }} 6 </div> 7 {{ Form::close() }} 8 9 <table> 10 <tr> 11 <th>タイトル</th> 12 <th>詳細</th> 13 <th>種類</th> 14 </tr> 15 @foreach ($books as $book) 16 <tr> 17 <td>{{ $book->title }}</td> 18 <td>{{ $book->description }}</td> 19 <td>{{ $book->kinds }}</td> 20 </tr> 21 @endforeach 22 </table> 23 24 {{ $books->links('vendor.pagination.bootstrap-4') }} 25
BooksController.php
1class BooksController extends Controller 2{ 3 public function show(Request $request) 4 { 5 $view = view('books'); 6 7 if($request->has('kd')) { 8 $kd = $request->query('kd'); 9 } 10 else { 11 $kd = 'a'; 12 } 13 14 // 確認 15 dump($request->query(), $kd ); 16 17 $books = Book::where('kinds','=',$kd)->paginate(5); 18 $view->kd = $kd; 19 return $view->with(['books' => $books], ['paginate_params' => ['kd' => $kd ]]); 20 } 21}
試したこと
(1) 上記の
return $view->with(['books' => $books], ['paginate_params' => ['kd' => $kd ]]);
では、URLに表示されないようです。
(2) paginate の「2」をクリックしたときに値が引き継がれるようにするため、次を試しましたが、想定した動作とはなりませんでした。
{{ dump($kd ); }} {{-- {{ $books->links('vendor.pagination.bootstrap-4') }} --}} {{-- 上から下に変更 --}} {{ $books->appends(request()->query('kinds','=',$kd))->links('vendor.pagination.bootstrap-4') }}
ラジオボタンの使用も考えましたが、ボタンは1クリックで済み操作が簡単なため、ボタンを使用したいと思います。
補足情報(FW/ツールのバージョンなど)
Laravel Framework 8.83.5
PHP 7.3.33
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/03/14 01:11
2023/03/14 05:21