能顯示所有文章之後,再來就是顯示單一文章
跟前面的 index.blade.php
很像,我們新增 resources/views/posts/show.blade.php
文章內容
<hr />
{{ $post->content }}
<hr />
然後修改 PostController
的 show()
,讓他可以使用這個 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 !
總結一下今天學到的東西。
今天我們延續昨天的教學,再加入新增文章的畫面之後,補充加入了編輯文章的畫面。
希望各位覺得今天的文章有學到東西,我們明天見!
在edit那邊好像漏了一步,想說如果新手可能會忘記前面教過
return view('posts.edit', ['post' => $post]);
試了很久不知道為什麼一直沒顯示XD
感謝!應該是我寫漏了,趕緊補上