Proyek kecil: aplikasi catatanMateri 15 dari 16
Daftar materi
Proyek kecil: aplikasi catatan · Materi 15 dari 16
Mengubah dan menghapus catatan
Dua method terakhir dari tujuh method standar. Ada satu trik kecil soal formulir HTML yang perlu kamu tahu.
3 menit 0 komentar
Daftar isi
Tiga route lagi, dan aplikasinya lengkap. Tambahkan di routes/web.php:
Route::get('/catatan/{note}/ubah', [NoteController::class, 'edit'])->name('catatan.edit');
Route::put('/catatan/{note}', [NoteController::class, 'update'])->name('catatan.update');
Route::delete('/catatan/{note}', [NoteController::class, 'destroy'])->name('catatan.destroy');
Formulir ubah
Method edit mirip show, hanya view-nya berbeda:
public function edit(Note $note)
{
return view('notes.edit', ['note' => $note]);
}
File resources/views/notes/edit.blade.php hampir sama dengan formulir tambah, dengan dua perbedaan yang saya tandai di komentar:
<x-layout title="Ubah catatan">
<h1>Ubah catatan</h1>
<form method="post" action="{{ route('catatan.update', $note) }}">
@csrf
@method('put') {{-- beda 1: formulir HTML hanya bisa GET dan POST, jadi PUT "dititipkan" lewat sini --}}
<label>Judul
<input type="text" name="title" value="{{ old('title', $note->title) }}"> {{-- beda 2: nilai awalnya dari catatan --}}
</label>
@error('title') <p>{{ $message }}</p> @enderror
<label>Isi
<textarea name="body">{{ old('body', $note->body) }}</textarea>
</label>
@error('body') <p>{{ $message }}</p> @enderror
<button>Simpan perubahan</button>
</form>
</x-layout>
old('title', $note->title) berarti: pakai isian lama kalau formulir baru saja ditolak, kalau tidak pakai judul catatan saat ini.
Menyimpan perubahan
public function update(Request $request, Note $note)
{
$data = $request->validate([
'title' => ['required', 'max:100'],
'body' => ['required'],
]);
$note->update($data);
return redirect()->route('catatan.show', $note)->with('status', 'Perubahan tersimpan.');
}
Validasinya sama persis dengan store. Kalau kamu merasa itu pengulangan, instingmu benar; Laravel punya form request untuk menaruh aturan validasi di satu class. Untuk sekarang, pengulangan dua kali masih wajar.
Menghapus
Menghapus tidak boleh lewat tautan biasa, karena tautan bisa dibuka tanpa sengaja (atau oleh mesin pencari). Pakai formulir kecil dengan tombol. Di notes/show.blade.php, tambahkan:
<a href="{{ route('catatan.edit', $note) }}">Ubah</a>
<form method="post" action="{{ route('catatan.destroy', $note) }}" onsubmit="return confirm('Hapus catatan ini?')">
@csrf
@method('delete')
<button>Hapus</button>
</form>
Dan method terakhirnya:
public function destroy(Note $note)
{
$note->delete();
return redirect()->route('catatan.index')->with('status', 'Catatan dihapus.');
}
Coba semuanya: ubah sebuah catatan, lihat pesannya, lalu hapus. Kalau kamu menjalankan php artisan route:list sekarang, ada tujuh route catatan.*: persis tujuh method standar yang kita bahas di bab 3.
Jalan pintasnya
Setelah kamu paham ketujuh route itu, ada cara menulisnya dalam satu baris:
Route::resource('catatan', NoteController::class)->parameters(['catatan' => 'note']);
Ini mendaftarkan ketujuh route dengan nama dan method standar. Saya sengaja menyimpannya di akhir: jalan pintas enak dipakai kalau kamu tahu apa yang ia singkat.
Diskusi
Masuk dulu untuk ikut berkomentar. Masuk
Belum ada diskusi di sini. Jadilah yang pertama bertanya.