[Laravel] 讓外送茶回復在你的文章下留言吧

上一篇有點富堅了,說要讓外送茶留言
結果只有顯示自己手動新增的訊息,說好的外送茶呢!
別急阿,你這不就見到了嗎



當然要先在 view 設計一個表單可以填入留言內容
加在之前的 show.blade.php 最後面,因為留言區域在文章最後面
<div class="card">
    <div class="card-block">
        <form action="POST" action="/posts/{{ $post->id }}/comments">
            {{ csrf_field() }}
            <div class="form-group">
                <textarea name="body" placeholder="請輸入留言內容" class="form-control"></textarea>
            </div>
            <div class="form-group">
                <button type="submit" class="btn btn-primary">留言</button>
            </div>
        </form>
    </div>
</div>

爽了,畫面有表單
現在要給送出按鈕做點事情,來到 \routes\web.php
加入我們剛剛 form 表單定義的資料傳送位置
Route::post('/posts/{post}/comments', 'CommentsController@store');

為了保持原有 PostComtroller 的簡潔,所以建一個新的CommetsController
使用
$ php artisan make:controller CommentsController -r
影片上是沒有使用 -r 但是我覺得這樣比較懶人所以加了
建立好 model 跟 Controller 之後,就是設計對應動作
在 CommentsController.php 中設計 store() 因為我們是要寫入資料庫

public function store(Post $post)
{
    $this->validate(\request(), ['body' => 'required|min:2']);
    $post->addComment(\request('body'));
    return back();
}

我們先給留言限制為必填,並且至少兩個字元
因為 function 傳入值使用到了 Post 這個 model
在檔案開頭必須加上
use App\Post
來指定命名空間
接著呼叫 Post model 中的 addComment 方法

在 app/Post.php 內新建 addComment 方法來寫入資料庫
public function addComment()
{
    $comment = new Comment;
    
    $comment->post_id = $this->id;
    $comment->body = request('body');
    $comment->save();
}

因為我們要用到 Comment 這個 model
而我們之前就已經建立過了,只需要 new 一個出來就可以使用
然後就跟之前新增文章一樣作法

特別的是,因為我們現在所在的位置是 Post 這個 model 底下
所以可以使用
$this
來代表當前所在的實體,就可以找到對應欄位
刷新頁面現在應該可以針對文章做評論了
如果你喜歡的話,可以把錯誤訊息區塊加入畫面
如此就完成了文章下方留言的功能!


留言