実現したいこと
laravelでブログサイトを作っています。
検索機能を追加しようと思い調べながら作っていました。
投稿一覧に検索フォームを作りその他コントローラーなどを書いたあと、動作確認のため検索ボタンを押したところ画面が真っ白になり何も表示されなくなってしまいました。原因が分からず困っています。アドバイスなどをいただけると幸いです。
前提
ルーティング、投稿一覧のindex.blade.php、検索ボタンを押したあとの遷移先のsearch.blade.php、PostController.php、Post.phpに処理などを書きました。5つのファイルをソースコードに記載します。
該当のソースコード
web.php
php
1<?php 2 3/* 4|-------------------------------------------------------------------------- 5| Web Routes 6|-------------------------------------------------------------------------- 7| 8| Here is where you can register web routes for your application. These 9| routes are loaded by the RouteServiceProvider within a group which 10| contains the "web" middleware group. Now create something great! 11| 12*/ 13 14Auth::routes(); 15 16Route::get('/', function () { 17 return redirect()->route('posts.index'); 18}); 19 20Route::resource('users', 'UserController')->only([ 21 'create', 'store','edit', 'update', 'show', 22]); 23 24Route::resource('posts', 'PostController'); 25 26Route::resource('follows', 'FollowController')->only([ 27 'index', 'store', 'destroy' 28]); 29 30Route::get('/follower', 'FollowController@followerIndex'); 31 32Route::get('/posts/search', 'PostController@search')->name('posts.search');
index.blade.php
php
1@extends('layouts.logged_in') 2 3@section('title', $title) 4 5@section('content') 6 <form action="{{ route('posts.search') }}" method="GET"> 7 @csrf 8 <input type="text" name="search_keyword"> 9 <button type="submit">検索</button> 10 </form> 11 <h2>おすすめユーザー</h2> 12 <ul class="recommend_users"> 13 @forelse($recommend_users as $recommend_user) 14 <li><a href="{{ route('users.show', $recommend_user) }}">{{ $recommend_user->name }}</a></li> 15 @empty 16 <li>他のユーザーが存在しません。</li> 17 @endforelse 18 </ul> 19 <h2>{{ $title }}</h2> 20 <ul> 21 @forelse($posts as $post) 22 <li> 23 {{ $post->user->name }}: 24 {!! nl2br($post->comment) !!}<br> 25 ({{ $post->created_at }}) 26 @if($user->isEditable($post)) 27 [<a href="{{ route('posts.edit', $post) }}">編集</a>] 28 @endif 29 @if($user->isEditable($post)) 30 <form action="{{ url('posts/'.$post->id) }}" method="post"> 31 @csrf 32 @method('delete') 33 <button type="submit">削除</button> 34 </form> 35 @endif 36 </li> 37 @empty 38 <p>投稿がありません。</p> 39 @endforelse 40 </ul> 41@endsection
search.blade.php
php
1@section('content') 2 <h2>検索結果: {{ $search_keyword }}</h2> 3 @if($posts->count() > 0) 4 <ul> 5 @foreach($posts as $post) 6 <li> 7 {{ $post->user->name }}: 8 {!! nl2br(e($post->comment)) !!}<br> 9 ({{ $post->created_at }}) 10 </li> 11 @endforeach 12 </ul> 13 @else 14 <p>該当する投稿がありません。</p> 15 @endif 16@endsection
PostController.php
php
1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Post; 7use App\Http\Requests\PostRequest; 8use App\User; 9 10class PostController extends Controller 11{ 12 // 投稿一覧 13 public function index(){ 14 $user = \Auth::user(); 15 $posts = $user->posts()->latest()->get(); 16 $follow_user_ids = $user->follow_users->pluck('id'); 17 $user_posts = $user->posts()->orWhereIn('user_id', $follow_user_ids )->latest()->get(); 18 return view('posts.index', [ 19 'title' => '投稿一覧', 20 'user' => $user, 21 'posts' => $user_posts, 22 'recommend_users' => User::recommend($user->id)->get(), 23 ]); 24 } 25 26 // 新規投稿フォーム 27 public function create() 28 { 29 return view('posts.create', [ 30 'title' => '新規投稿', 31 ]); 32 } 33 34 // 投稿追加処理 35 public function store(PostRequest $request){ 36 Post::create([ 37 'user_id' => \Auth::user()->id, 38 'comment' => $request->comment, 39 ]); 40 session()->flash('success', '投稿を追加しました'); 41 return redirect()->route('posts.index'); 42 } 43 44 // 投稿編集フォーム 45 public function edit($id) 46 { 47 // ルーティングパラメータで渡されたidを利用してインスタンスを取得 48 $post = Post::find($id); 49 return view('posts.edit', [ 50 'title' => '投稿編集', 51 'post' => $post, 52 ]); 53 } 54 55 // 投稿更新処理 56 public function update($id, PostRequest $request) 57 { 58 $post = Post::find($id); 59 $post->update($request->only(['comment'])); 60 session()->flash('success', '投稿を編集しました'); 61 return redirect()->route('posts.index'); 62 } 63 64 // 投稿削除処理 65 public function destroy($id) 66 { 67 $post = Post::find($id); 68 69 $post->delete(); 70 session()->flash('success', '投稿を削除しました'); 71 return redirect()->route('posts.index'); 72 } 73 74 public function __construct() 75 { 76 $this->middleware('auth'); 77 } 78 79 public function show($id) 80 { 81 $post = Post::find($id); 82 return view('posts.show', [ 83 'title' => '投稿詳細', 84 'post' => $post, 85 ]); 86 } 87 88 public function search(Request $request) 89 { 90 $keyword = $request->input('search_keyword'); 91 92 $posts = Post::where('user_id', '<>', Auth::id()) 93 ->where('comment', 'LIKE', '%'.$keyword.'%') 94 ->latest() 95 ->get(); 96 97 return view('posts.search', [ 98 'posts' => $posts, 99 'search_keyword' => $keyword, 100 ]); 101 } 102}
Post.php
php
1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6use App\Post; 7 8class Post extends Model 9{ 10 protected $fillable = ['user_id', 'comment',]; 11 12 public function user(){ 13 return $this->belongsTo('App\User'); 14 } 15 16 public function comments(){ 17 return $this->hasMany('App\Comment'); 18 } 19 20 public function scopeSearch($query, $keyword) 21 { 22 $user_id = Auth::id(); 23 return $query->where('user_id', '<>', $user_id) 24 ->where(function ($query) use ($keyword, $user_id) { 25 $query->where('comment', 'LIKE', '%'.$keyword.'%') 26 ->orWhere('created_at', 'LIKE', '%'.$keyword.'%'); 27 }) 28 ->latest(); 29 } 30}
試したこと
ルーティングの確認、真っ白になってしまう原因をネットで調べたか直接的な解決の糸口にはならなかった。
補足情報(FW/ツールのバージョンなど)
windows11です。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー