Setelah sebelumnya kita berhasil menambahkan fitur untuk membuat artikel baru, kini saatnya kita melanjutkan dengan fitur mengubah artikel. Fitur ini memungkinkan user untuk memperbarui data artikel yang sudah ada, seperti judul, isi, atau lainnya.
Route untuk fitur ini sudah kita buat sebelumnya. Tugas kita selanjutnya adalah menyesuaikan controller, khususnya method edit() dan update().
Sudah siap? Yuk, kita mulai.
Menyesuaikan Controller untuk Menampilkan Form Edit Artikel #
Untuk menampilkan form edit artikel, kita perlu menyesuaikan method edit().
Buka file ArticleController.php dan sesuaikan kode menjadi sebagai berikut:
📄 app/Http/Controllers/ArticleController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
/** ... **//**
* Show the form for editing the specified resource.
*/publicfunctionedit(Article$article):View{$statusList=Article::STATUS_LIST;returnview('pages.articles.edit',compact('article','statusList'));}/** ... **/
Membuat View untuk Menampilkan Form Edit Artikel #
Form edit ini hampir sama seperti form tambah artikel. Untuk saat ini, kita akan tulis ulang terlebih dahulu. Tenang saja, di artikel selanjutnya kita akan refaktor agar lebih DRY (Don’t Repeat Yourself).
Buat file resources/views/pages/articles/edit.blade.php dan tambahkan kode berikut:
Berhubung kita menggunakan form request yang sama dengan proses menambahkan (store) artikel, kita bisa langsung menyesuaikan method update() pada controller.
Buka kembali file ArticleController.php dan sesuaikan menjadi sebagai berikut:
/** ... **/useIlluminate\Support\Facades\Storage;/** ... **//**
* Update the specified resource in storage.
*/publicfunctionupdate(ArticleRequest$request,Article$article):RedirectResponse{try{$input=$request->validated();$storagePath=Article::IMAGE_STORAGE_PATH;if($request->hasFile('feature_image_url')){if($article->feature_image_url){$oldFilePath="$storagePath/$article->feature_image_url";if(Storage::disk('public')->exists($oldFilePath)){Storage::disk('public')->delete($oldFilePath);}}$file=$request->file('feature_image_url');$fileName=time().'_'.$file->getClientOriginalName();$file->storeAs($storagePath,$fileName,'public');$input['feature_image_url']=$fileName;}$article->update($input);flash()->success('Data berhasil di-update!');}catch(\Exception$e){report($e);flash()->error('Data tidak berhasil di-update!');}finally{returnredirect(route('articles.index'));}}/** ... **/
Perbedaan utama dengan method store() adalah sebagai berikut:
Jika user mengunggah gambar baru, gambar lama akan dihapus terlebih dahulu.
Menggunakan Eloquent method update() untuk menyimpan perubahan.
Pesan notifikasi disesuaikan dengan konteks update.
Berikut adalah tampilan form apabila terdapat kesalahan validasi:
Hasil dari pengubahan di atas adalah sebagai berikut:
Fitur mengubah artikel yang kita tambahkan kali ini melengkapi proses pengelolaan konten di aplikasi blog kita. Dengan memanfaatkan form yang sudah ada, kita bisa menjaga konsistensi tampilan dan pengalaman user.
Nah, kalau kita perhatikan lebih dalam, ternyata masih ada beberapa bagian kode yang bisa kita sederhanakan. Di artikel berikutnya, kita akan mulai refaktor agar struktur proyek kita jadi lebih bersih, efisien, dan siap untuk dikembangkan lebih lanjut.