前提・実現したいこと
Twitter風の投稿サイトを作成中です。
index.blade.phpに投稿内容が表示されるようになっています。そこに投稿の詳細をクリックできるようになっています。
show.blade.phpという投稿の詳細のページに遷移するとUndefined variable: 変数
というエラーが出て解決できません。変数を渡せたらUser-ID タイトル 投稿内容の詳細 投稿時間が全て表示されるようになっています。
発生している問題・エラーメッセージ
Undefined variable: review (View: /Applications/MAMP/htdocs/Online-Reviews/resources/views/online-reviews/show.blade.php)
該当のソースコード
online-reviews/index.blade.php こちらが投稿内容を一覧に表示できるページ @foreach ($reviews as $review) <div class="posted-table"> <div class="posted-header"> <div class="user-id">User-ID {{ $review->user_id }}</div> <div class="title">タイトル {{ $review->title}}</div> </div> </div> <div class="text-container">投稿内容 <div class="text">{!! nl2br(e(Str::limit($review->text, 100))) !!}</div> <a href="{{ route('online_reviews.show',[$review->text]) }}">投稿の詳細を読む</a> </div> <div class="date-container"> <span class="date"> 投稿日時 {{ $review->created_at }} </span> </div> @endforeach
online-reviews/show.blade.php 投稿の詳細ページになります。 <div class="content"> <div class="list-box"> <div class="list-container"> <div class="hospital-name">A病院</div> <div class="address-name">大阪府大阪市</div> </div> @foreach ((array) $review as $review)) //こちらがエラー箇所です <div class="posted-table"> <div class="posted-header"> <div class="user-id">User-ID {{ $review->user_id }}</div> <div class="title">タイトル {{ $review->title}}</div> </div> </div>
OnlineReviewsController.php public function index() { { $reviews =DB::table('online_reviews') ->select('title','text','user_id','created_at') ->orderBy('created_at','desc')// 登録日時の順序を設定できる laravel公式にてクエリビルダにある。 ->paginate(5); //メソッドチェーンのget return view('online-reviews.index',compact('reviews')); } } public function show($id) { $review = OnlineReviews::find($id); // dd($id); return view('online-reviews.show',compact('review')); }
試したこと
コントローラーのcompactの変数の渡し方は間違っていないと思います。
そうなれば、web.phpで値が渡れていないのでshow{id}を下記のように変数しました。Route::get('show/{id}', 'OnlineReviewsController@show')->name('online_reviews.show');
を
Route::get('show/{id}',function($id){return view('online-reviews.show');},'OnlineReviewsController@show')->name('online_reviews.show');
に変更しました。
Route::get('show/{id}', 'OnlineReviewsController@show')->name('online_reviews.show');
このまま変更しなければ下記のスクショみたいにURLに投稿内容が表示されページには表示されません。
しかし、それでも変数が渡されていない状況です。
web.php //OnlineReviewsのルーティングと // ログインしないとページに遷移できないようにmiddlewareを記述 Route::group(['prefix' => 'online_reviews','middleware' => 'auth'], function(){ Route::get('index','OnlineReviewsController@index')->name('online_reviews.index'); // 投稿一覧表 Route::get('create','OnlineReviewsController@create')->name('online_reviews.create');//投稿ページの表示 Route::post('store','OnlineReviewsController@store')->name('online_reviews.store');//投稿を保存するルーティング Route::get('show/{id}',function($id){return view('online-reviews.show');},'OnlineReviewsController@show')->name('online_reviews.show'); }); //Route::get('show/{id}', 'OnlineReviewsController@show')->name('online_reviews.show');元々のコードはこちらになります。これを上記のように変更しました。 //shopのルーティング Route::group(['prefix' => 'shop'],function(){ Route::get('index','ShopController@index')->name('shop.list'); Route::get('show','ShopController@show')->name('shop.show');//お店の詳細を確認する });
補足情報(FW/ツールのバージョンなど)
laravel6.20
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/09 09:33