Proyek kecil: aplikasi catatanレッスン 14/16
レッスン一覧
Proyek kecil: aplikasi catatan · レッスン 14/16
Form tambah catatan dan validasi
Formulir pertama: dikirim dengan POST, diperiksa dengan validasi, disimpan dengan satu baris, dan diakhiri pesan sukses.
7分 コメント0件
目次
Menambah catatan butuh dua route: satu untuk menampilkan formulir (GET), satu untuk menerima kirimannya (POST). Tambahkan di routes/web.php, dan letakkan di atas route /catatan/{note}, supaya alamat /catatan/baru tidak dikira id catatan bernama "baru":
Route::get('/catatan/baru', [NoteController::class, 'create'])->name('catatan.create');
Route::post('/catatan', [NoteController::class, 'store'])->name('catatan.store');
Formulirnya
Method create di controller cukup mengembalikan view:
public function create()
{
return view('notes.create');
}
Lalu resources/views/notes/create.blade.php:
<x-layout title="Catatan baru">
<h1>Catatan baru</h1>
<form method="post" action="{{ route('catatan.store') }}">
@csrf
<label>Judul
<input type="text" name="title" value="{{ old('title') }}">
</label>
@error('title') <p>{{ $message }}</p> @enderror
<label>Isi
<textarea name="body">{{ old('body') }}</textarea>
</label>
@error('body') <p>{{ $message }}</p> @enderror
<button>Simpan</button>
</form>
</x-layout>
Tiga hal yang wajib ada di setiap formulir Laravel:
@csrfmenyisipkan token rahasia. Tanpa ini, Laravel menolak kiriman dengan halaman 419 Page Expired. Ini perlindungan dari situs lain yang mencoba mengirim formulir atas namamu.old('title')mengisi kembali isian yang tadi diketik kalau formulir ditolak validasi, supaya pengguna tidak mengetik ulang.@error('title')menampilkan pesan kesalahan untuk kolom itu, kalau ada.
Menerima dan memvalidasi
use Illuminate\Http\Request;
public function store(Request $request)
{
$data = $request->validate([
'title' => ['required', 'max:100'],
'body' => ['required'],
]);
Note::create($data);
return redirect()->route('catatan.index')->with('status', 'Catatan tersimpan.');
}
Baca pelan-pelan, karena pola ini akan kamu pakai terus:
$request->validate([...])memeriksa kiriman. Kalau ada yang tidak lolos, Laravel otomatis mengembalikan pengguna ke formulir, lengkap dengan pesan error dan isian lamanya. Kalau lolos, ia mengembalikan hanya kolom-kolom yang kamu sebut, jadi aman dipakai langsung.Note::create($data)menyimpan catatan baru. Ini yang tadi kita izinkan lewat$fillable.redirect()->route(...)mengarahkan ke halaman daftar, danwith('status', ...)menitipkan pesan untuk satu kali tampil.
Menampilkan pesan sukses
Di components/layout.blade.php, tepat di atas {{ $slot }}, tambahkan:
@if (session('status'))
<p>{{ session('status') }}</p>
@endif
Dan di halaman daftar, tambahkan tautan <a href="{{ route('catatan.create') }}">Tulis catatan</a>. Sekarang coba alurnya: buka formulir, kirim dalam keadaan kosong (lihat pesan errornya), isi dengan benar, dan lihat catatanmu muncul di daftar dengan pesan "Catatan tersimpan."
Aturan validasi yang tersedia sangat banyak: email, min:8, numeric, unique:notes,title, dan ratusan lainnya. Daftarnya ada di dokumentasi; tidak perlu dihafal.
ディスカッション
コメントするにはログインしてください。 ログイン
まだディスカッションはありません。最初の質問をしてみましょう。