質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

SNS

SNS(ソーシャル・ネットワーキング・サービス)は、 人と人とのつながりを促進したり、サポートしたりすることが可能なコミュニティ型のWebサービスです。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

1304閲覧

SNSで記事にコメントをつけることができるようにし、その記事に対するコメント一覧も表示したいが一覧が表示されない、なぜでしょうか?

katahaba

総合スコア15

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

SNS

SNS(ソーシャル・ネットワーキング・サービス)は、 人と人とのつながりを促進したり、サポートしたりすることが可能なコミュニティ型のWebサービスです。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/09/05 03:36

モデル部分

<?php namespace App; use Illuminate\Database\Eloquent\Model; class Micropost extends Model { protected $fillable = [ 'user_id', 'image_path', 'search_tag', 'map_lat', 'map_long' ]; public function user() { return $this->belongsTo(User::class); } public function comments() { return $this->hasMany(Comment::class); } }

コントローラー部分

php

1<?php 2 3namespace App\Http\Controllers; 4use Illuminate\Http\Request; 5use App\Http\Requests; 6use App\Http\Controllers\Controller; 7use App\User; 8use App\Micropost; 9use App\Comment; 10 11class CommentsController extends Controller 12{ 13 14 public function index($micropost_id) 15 { 16 $comments = new Comment; 17 $micropost = Micropost::find($micropost_id); 18 $comments = $micopost->comments()->orderBy('created_at', 'desc')->paginate(10); 19 return view('microposts.show', ['comments' => $comments]); 20 } 21 22 public function store(Request $request, $micropost_id) 23 { 24 $micropost = Micropost::find($micropost_id); 25 $this->validate($request, ['comment' => 'required|max:191', ]); 26 $micropost->comments()->create([ 27 'user_id' => \Auth::User()->id, 28 'micropost_id' => $micropost_id, 29 'comment' => $request->comment, 30 ]); 31 return redirect()->back(); 32 } 33}

viewコメント一覧部分 microposts.show

<ul class="media-list"> @foreach($comments as $comment)ここでUndefined variable: comments とエラーが出る <li class="media"> <div class="media-right"> <div class="media-body"> <div> <p>{{ $comment->comment }}</p> </div> </div> </div> </li> @endforeach </ul>

viewコメント入力部分 microposts.show

<p>コメント</p> <div class="row"> <div class="col-xs-12"> {!! Form::open(['action' => ['CommentsController@store', $micropost->id]]) !!} <div class="form-group"> {!! Form::textarea('comment', old('comment'), ['class' => 'form-control', 'rows' => '2']) !!} </div> {!! Form::submit('New comment', ['class' => 'btn btn-warning btn-block']) !!} </div> </div>

ルーティングは以下の通り 

Route::group(['middleware' => 'auth'], function () { Route::resource('users', 'UsersController', ['only' => ['index', 'show', 'edit', 'update', 'destroy']]); Route::group(['prefix' => 'users/{id}'], function () { Route::post('follow', 'UserFollowController@store')->name('user.follow'); Route::delete('unfollow', 'UserFollowController@destroy')->name('user.unfollow'); Route::get('followings', 'UsersController@followings')->name('users.followings'); Route::get('followers', 'UsersController@followers')->name('users.followers'); Route::post('favorite', 'FavoritesController@store')->name('user.favorite'); Route::delete('unfavorite', 'FavoritesController@destroy')->name('user.unfavorite'); Route::get('favoritings', 'UsersController@favoritings')->name('users.favoritings'); }); Route::get('microposts/search', 'MicropostsController@search'); Route::get('microposts/maps', 'MicropostsController@maps')->name('microposts.maps'); Route::resource('microposts', 'MicropostsController', ['only' => ['create', 'store', 'show', 'edit', 'update', 'destroy']]); Route::group(['prefix' => 'microposts/{id}'], function () { Route::resource('comment', 'CommentsController', ['only' => ['index', 'store', 'destroy']]); });

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

micropostsコントローラを見てないので推測ですが

Route::resource('microposts', 'MicropostsController', ['only' => ['create', 'store', 'show', 'edit', 'update', 'destroy']]);

のmicroposts.showと

Route::resource('comment', 'CommentsController', ['only' => ['index', 'store', 'destroy']]);

のcomment.indexが同じmicropost.showのviewを参照しているからだと思います。

つまりコメント一覧を開いた時にCommentControllerのindexではなくMicropostControllerのshowを通っている。
で、MicropostControllerのshowアクションでは $comments 変数をビューへ渡していないので Undefined エラーが出ているのではないでしょうか?

CommentControllerのindexアクションでmicroposts.showのビューへ飛ばすというのが一般的な命名規則としておかしいです(名前が対応していない)。
現に混乱されていますよね。
comments.indexのビューを作って表示させるべきと思います。

投稿2018/09/05 04:38

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

katahaba

2018/09/05 07:20

``` public function show($id) { $user = \Auth::user(); $micropost = Micropost::find($id); $comments = DB::table('comments')->where('micropost_id', $id)->orderBy('created_at', 'desc')->paginate(10); $data = ['user' => $user, 'micropost' => $micropost, 'comments'=>$comments]; return view('microposts.show',$data); } ``` としてshowのページにコメント一覧を表示することができましたが、コメントした人のユーザー名が表示できないという別の問題が出て来たので別のトピックスとしてあげることにしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問