前提・実現したいこと
PHP(Laravel8)で掲示板の様なシステムを作っています。
その中で、「投稿の検索機能」と「検索結果の表示」と「ページネーション」の実装をしようとしています。
postメソッドを使って検索フォームから投稿を検索したところ、検索結果の一覧の表示をする事は出来ました。
そこに、ページネーション機能を実装した所、2ページ目以降で404エラーが発生します。
2ページ目のアドレスは、
http://localhost:8888/do-si/public/post/search?page=2
となっています。
疑問点
・メソッドはPOSTを使うべきか、GETを使うべきか
・POSTを使う場合、ページネーションの2ページ目以降でなぜ404エラーが発生するのか
・GETを使う場合、検索をかけた時、なぜ404エラーが発生するのか
発生している問題・エラーメッセージ
404見つかりません
該当のソースコード
views/layouts/sidebar.blade.php
php
1<!-- 投稿の検索 --> 2<form method="post" action="{{route('posts.search')}}"> 3 @csrf 4 <div class="form-group"> 5 <input type="search" class="form-control mr-sm-2" name="search" value="{{request('search')}}" placeholder="キーワードを入力" aria-label="検索..."> 6 <button class="btn btn-info col-md-4">検索</button> 7 </div> 8</form>
web.php
php
1Route::post('/post/search', [App\Http\Controllers\HomeController::class, 'search'])->name('posts.search');
HomeController.php
php
1//検索ワードから投稿の検索 2public function search(Request $request) 3{ 4 $posts=Post::where('title', 'LIKE', "%{$request->search}%") 5 ->orWhere('body', 'LIKE', "%{$request->search}%") 6 ->orderBy('created_at','desc')->paginate(5); 7 8 return view('searchpost', compact('posts')); 9}
views/searchpost.blade.php
php
1<!-- ページネーション --> 2<div class="d-flex justify-content-center mb-1"> 3 {{ $posts->links() }} 4</div>
試したこと
「postだと検索した値が次ページに引き継がれません。getに変えてみて下さい。」という記事を見つけたので、
postメソッドをgetメソッドに変えてみたのですが、投稿の検索をすると404エラーが出てしまいます。
アドレスは、http://localhost:8888/do-si/public/post/search?_token=cMNFWJAddY3qpBjdaCEU2LqJ8tb6pb0obYbyMsiQ&search=となっています。
補足情報(FW/ツールのバージョンなど)
MAMP 6.3(1040)
laravel 8.46.0
PHP 7.4.20
VScode 1.57.1
あなたの回答
tips
プレビュー