接續昨天的留言。
// CommentController.php
public function create(Request $request)
{
$comment = new Comment;
$comment->user_id = Auth::user()->id;
$comment->post_id = $request->input('post_id');
$comment->message = $request->input('message');
$comment->save();
return redirect()->route('home');
}
public function delete($id)
{
$post = DB::table('comments')
->where('comment_id', '=', $id)
->delete();
return redirect()->route('home');
}
重點在View這邊,我把留言的部分另外切一個子視圖comment.blade.php
出來。
// home.blade.php
<div>@include('comment', ['comments' => $comments])</div>
Home多增加一行引入子視圖。
<div>
<form method="POST" action="{{ route('c_create') }}">
@csrf
<input type="hidden" name="post_id" value="{{ $post->post_id }}">
<input type="text" name="message">
<button type="submit" class="btn btn-primary">Comment</button>
</form>
@foreach($comments as $comment)
@if($comment->post_id === $post->post_id)
<div>
<p>{{ $comment->name }} : {{ $comment->message }}</p>
@if(($comment->user_id) === (Auth::user()->id))
<form action="{{ route('c_destroy', $comment->comment_id) }}" method="POST">
@csrf
<button>Delete</button>
</form>
@endif
</div>
@endif
@endforeach
</div>
Create的部分跟貼文一樣,只是另外用一個hidden記錄這則留言是給哪一則貼文的。
子視圖會繼承父視圖攜帶的資料,所以在comment.blade.php
裡面也可以使用$post
,比較$comment
跟$post
的post_id
欄位,就能只顯示該貼文的留言。
Delete功能比照貼文,只有使用者本人可以刪除自己的留言。