iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 19
1
Modern Web

Laravel 6.0 初體驗!怎麼用最新的 laravel 架網站!系列 第 19

[Day 19] 繼續聊文章!怎麼透過表單編輯文章

顯示單一文章內容

能顯示所有文章之後,再來就是顯示單一文章

跟前面的 index.blade.php 很像,我們新增 resources/views/posts/show.blade.php

文章內容
<hr />
    {{ $post->content }}
<hr />

然後修改 PostControllershow(),讓他可以使用這個 view

public function show(Post $post)
{
    return view('posts.show', ['post' => $post]);
}

再提醒大家一下,後面的陣列就是用來回傳 $post 到畫面裡的。

然後,我們連線到 http://127.0.0.1/posts/1 就可以看到 id 為 1 的文章內容囉!

可以在資料庫修改一下文章內容,看看是否確實生效了。

編輯文章

編輯文章的畫面,跟新增文章基本上雷同。

我們先建立 resources/views/posts/edit.blade.php

編輯文章

<form action="{{ route('posts.update', [ 'post' => $post]) }}" method="POST">
    @method('PUT')
    @csrf
    <label>內容:
        <textarea name="content">{{ $post->content }}</textarea>
    </label><br>
    <input type="submit" value="送出文章">
</form>

細心的讀者可能會發現到,雖然畫面看起來很像,不過我們改變了幾個地方。

首先,我們路徑改變成 route('posts.update', [ 'post' => $post]),讓編輯完的結果可以正確的回傳到update(),並且會代入 $post 變數。

我們加上了 @method('PUT'),這是因為 Laravel 預設編輯所接受的 HTTP 請求方法,如同,是 PUT

但是 HTML 表單的處理 method,不支援這個請求方法。

所以必須多加這個樣板,讓表單多加一個 <input type="hidden" name="_method" value="PUT">,讓 Laravel 知道這是對應 PUT 請求方法的。

最後,我們編輯框改寫成 <textarea name="content">{{ $post->content }}</textarea>,讓編輯畫面可以顯示原本的內容。

這樣,就可以修改原本文章的資料,往後方傳輸囉!

接著,我們在顯示編輯畫面的路徑裡,連接這個 view

public function edit(Post $post)
{
    return view('posts.edit', ['post' => $post]);
}

這樣,就可以在 http://127.0.0.1/posts/1/edit 編輯 id 為 1 的文章囉!

(感謝 Nighteye1228 版友的補充!)

更新文章

接著,我們編輯一下 update() 函式,預設的程式碼裡面已經有 $request$post 了,我們只要處理寫入的邏輯就好。

處理完文章的更新之後,我們倒回到顯示單一文章內容的畫面。記得指定是要顯示原本編輯的文章

public function update(Request $request, Post $post)
{
    $post->content = $request->input('content');
    $post->save();
    return redirect(route('posts.show', ['post' => $post]));
}

現在,我們到 http://127.0.0.1/posts/1/edit 編輯並送出看看。成功的話,我們就可以在編輯完成之後,順利的導回到 http://127.0.0.1/posts/1


總結一下今天學到的東西。

今天我們延續昨天的教學,再加入新增文章的畫面之後,補充加入了編輯文章的畫面。

希望各位覺得今天的文章有學到東西,我們明天見!


上一篇
[Day 18] 繼續談 resource,建立表單來新增文章
下一篇
[Day 20] 刪除文章但是不刪除資料!聊 Soft Delete
系列文
Laravel 6.0 初體驗!怎麼用最新的 laravel 架網站!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
Nighteye1228
iT邦新手 5 級 ‧ 2019-09-22 03:35:25

在edit那邊好像漏了一步,想說如果新手可能會忘記前面教過

return view('posts.edit', ['post' => $post]);

試了很久不知道為什麼一直沒顯示XD

ReccaChao iT邦新手 1 級 ‧ 2019-09-22 10:49:26 檢舉

感謝!應該是我寫漏了,趕緊補上

我要留言

立即登入留言