Laravel 學習筆記 — 專案練習 Part 7 — 文章刪除

ViNciHsu
Oct 21, 2020

--

這篇是 CRUD 內的 D ,也就是刪除

我們想在文章列表的"編輯"字樣旁邊,加上"刪除"的功能

因此理論上,我們應該要到 index.blade.php 中,在"編輯"的後面加上"刪除"功能,但是如果此時,我們跟"編輯"一樣,採用 <a> 的作法,會產生一些問題,什麼問題呢?

我們用 php artisan route:list | grep articles 查看,可以發現刪除功能使用的動詞是 DELETE,但是 <a> 是無法做到 DE這個效果的;既然如此,那我們該怎麼辦呢?

還記得類似的狀況,我們在做修改時,是否也遇到了,當時無法在表單使用 PUT|PATCH,後來我們怎麼做的,我們可以在此處使用類似的作法來做刪除功能

首先,我們建立一個 <form> ,method 一樣是 post,加上 @method(‘delete’) 來告訴它,等下處理表單時,動詞幫我們使用 delete 做處理,記得也要加上 @CSRF ,我們檢視原始碼可以看到,列表的每天文章,都出現了隱藏欄位

我們做一個刪除按鈕,如下圖

但我們想讓刪除方在"編輯"的旁邊,這時候,可以使用 <div> 將整個 <form> 和"編輯"的 <a> 包起來

用 <div> 將整個 <form> 和”編輯”的 <a> 包起來
刪除按鈕的樣式

這個時候,點擊"刪除"按鈕,會出現我們預期的錯誤(因為我們還沒寫 destroy)

編寫 App\Http\Controllers\ArticlesController::destroy,編寫刪除,需要以使用者角度,找到該篇文章,才能進行刪除

記得我們前面製作資料表結構時,有個用來記錄假刪除的 deleted_at 的欄位嗎?我們可以到 App\Models\Article.php 加上 use SoftDeletes;

要特別注意,phpstorm 會自動加上 use Illuminate\Database\Eloquent\SoftDeletes; 但是其他編輯器不一定會這麼做,所以平常如果沒有手動加這行,會不能使用軟刪除

做到目前,我們可以來試試看刪除功能了

測試看刪除功能

文章列表由5筆變成4筆,刪除的那1筆真的刪除了嗎?我們到 SQLite 看看

標題為"測試建構子"這篇文章,其實還是留在資料庫中,只是紀錄的 deleted_at 的時間後,就不會再顯示出來

CRUD 大致上就做到此篇了

--

--

No responses yet