前提・実現したいこと
PHP(Laravel)で登録したレシピの検索機能を作っています。
「レシピ名(recipe_name)」で検索する機能を実装中に、以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
navbarに実装した入力フォームから検索ボタンを押すと、indexに検索結果が表示される処理を実装したいです。
また、未入力であれば全検索を行います。
現状「検索ボタン」を押すと、下記のエラーが発生します。
どの箇所を修正したらよいかご教授いただきたいです、よろしくお願いします。
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException No message
該当のソースコード
web.php
PHP
1<?php 2 3//トップページ 4Route::get('/', 'RecipesController@index'); 5 6//検索機能 7Route::get('recipes', 'RecipesController@getSearch')->name('search.get'); 8
RecipesController.php
php
1<?php 2 3namespace App\Http\Controllers; 4use Illuminate\Http\Request; 5use App\Recipe;//追加 6 7class RecipesController extends Controller 8{ 9 //getでrecipes/にアクセスされた場合の「一覧表示処理」 10 public function index() 11 { 12 13 //レシピのインスタンス作成 14 $recipes = Recipe::paginate(5); 15 16 return view('recipes.index', [ 17 'recipes' => $recipes, 18 ]); 19 } 20 21 //検索機能 22 public function getSearch(Request $request) 23 { 24 //入力フォーム"keywords"に入力された内容を取得 25 $query = $request->input('keywords'); 26 27 //検索フォームに入力があれば 28 if($request->has('keywords')){ 29 //レシピ名で検索した結果をインスタンスに格納 30 $recipes = Recipe::where('recipe_name', 'LIKE', '%' .$request->get('keywords').'%')->paginate(5); 31 }else{ 32 //検索フォーム未入力であれば、全検索の結果を格納 33 $recipes = Recipe::paginate(5); 34 } 35 36 //トップページ(index.blade.php)に返す 37 return view('recipes.index', [ 38 'recipes' => $recipes, 39 'keywords' => $request->input('keywords'), 40 ]); 41 42 }
resources\views\commons\navbar.blade.php
php
1<header> 2 <div class="search"> 3 //「検索する」を押すと、RecipesController.phpのgetSearch()に処理を渡す 4 {!! Form::open(['route' => 'search.get']) !!} 5 {!! Form::text('keywords', null,['class' => 'form-control']) !!} 6 {!! Form::submit('検索する',['class' => 'btn btn-primary btn-block']) !!} 7 {!! Form::close() !!} 8 </div> 9</header> 10
resources\views\layouts\app.blade.php
php
1 <body> 2 @include('commons.navbar') 3 <div class="container"> 4 @yield('content') 5 </div> 6 </body>
resources\views\recipes\index.blade.php
php
1@extends('layouts.app') 2 3@section('content') 4 <div class="wrapper"> 5 <!--レシピ一覧の表示--> 6 <div> 7 @foreach($recipes as $recipe) 8 @if(count($recipes) > 0) 9 <p>{{ $recipe->recipe_name}}</p> 10 @endif 11 @endforeach 12 </div> 13 </div> 14 {{ $recipes->appends(['keywords' => Request::get('keywords')])->links('pagination::bootstrap-4') }} 15@endsection
試したこと
ページネーションの箇所は
https://readouble.com/laravel/5.3/ja/pagination.html
のappendsを参照しました。
補足情報(FW/ツールのバージョンなど)
PHP 7.2.22
Laravel 5.5
BootStrap4
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/02 02:57