Lompat ke isi
Les Laravel DocsTutorial Les Privat · Laravel CRUD
Unduh Starter Pack
Sesi 2: Seeder, Route & ReadEstimasi: 35 menit5 titik periksa

Bab 4 — Route dan Kerangka Controller

4.1Konsep

Route = resepsionis

Saat pengunjung mengetik /siswa/create, Laravel bertanya: "siapa yang melayani alamat ini?". Route menjawab: "method create milik SiswaController." Semua jawaban itu ditulis di routes/web.php.

Route::resource = tujuh rute sekaligus

CRUD memakai pola alamat yang selalu sama. Daripada menulis tujuh baris, Laravel menyediakan satu baris Route::resource:

Method HTTP URI Nama rute Method controller Tugas
GET /siswa siswa.index index Daftar siswa
GET /siswa/create siswa.create create Formulir tambah
POST /siswa siswa.store store Simpan siswa baru
GET /siswa/{siswa} siswa.show show Lihat satu siswa
GET /siswa/{siswa}/edit siswa.edit edit Formulir ubah
PUT/PATCH /siswa/{siswa} siswa.update update Simpan perubahan
DELETE /siswa/{siswa} siswa.destroy destroy Hapus

Route model binding

Pada alamat seperti /siswa/5/edit, bagian {siswa} adalah nomor id. Kalau method controller menulis edit(Siswa $siswa), Laravel otomatis mencari siswa ber-id 5 dan memberikannya kepadamu. Kalau tidak ada, Laravel membalas 404 tanpa kamu menulis kode apa pun.

4.2Langkah 1 — Isi routes/web.php

📄 Ganti seluruh isi berkas routes/web.php

routes/web.phpPHP
<?phpuse App\Http\Controllers\SiswaController;use Illuminate\Support\Facades\Route;Route::get('/', function () {    return redirect()->route('siswa.index');});Route::resource('siswa', SiswaController::class);

Baris pertama mengalihkan alamat utama / ke daftar siswa. Baris kedua mendaftarkan tujuh rute.

4.3Langkah 2 — Lihat daftar rute

PowerShell
php artisan route:list --name=siswa

Isi tabel di bukumu dari keluaran perintah itu, bukan dari tebakan. Bandingkan hasilnya dengan tabel 4.1:

Method HTTP URI Nama Rute Method Controller
GET|HEAD siswa siswa.index index
… … … …

Pertanyaan: ada berapa rute? Kenapa bukan hanya empat (satu per huruf CRUD)?

4.4Langkah 3 — Uji jalur dengan teks sederhana

Sebelum ada tampilan apa pun, kita cek dulu bahwa jalurnya benar. Buka app/Http/Controllers/SiswaController.php dan ubah isi method index() sementara menjadi:

📄 Berkas app/Http/Controllers/SiswaController.php — ubah sementara index()

app/Http/Controllers/SiswaController.phpPHP
    public function index()    {        return 'Halo dari index()';    }

Jalankan php artisan serve, lalu buka satu per satu:

Alamat Yang harus terlihat
http://127.0.0.1:8000/siswa Teks Halo dari index()
http://127.0.0.1:8000/ Otomatis pindah ke /siswa
http://127.0.0.1:8000/siswa/1 Halaman kosong tanpa galat
http://127.0.0.1:8000/siswa/9999 Halaman 404

Kenapa /siswa/1 kosong, bukan galat? Karena -r tadi membuat method show() yang isinya kosong (hanya komentar //), dan Laravel mengirimkan jawaban kosong. Aplikasi kita tidak memakai halaman show, jadi kita biarkan. Kenapa /siswa/9999 menjadi 404? Itu route model binding yang bekerja.

⚠️ Halaman /siswa/1 hanya muncul kosong kalau siswa dengan id 1 ada. Itu ada karena kamu menjalankan seeder di Bab 3.

4.5Jalankan test

PowerShell
php artisan test --filter=RuteSiswaTest

Empat test memeriksa: ketujuh rute terdaftar, alamat / dialihkan ke /siswa, /siswa bisa dibuka (kode 200), dan rute show ada tetapi halamannya kosong. Harapannya: Tests: 4 passed.


Titik periksa Bab 4

Centang setiap butir yang sudah kamu selesaikan.

  • php artisan route:list --name=siswa menampilkan 7 rute dan tabel di bukuku sudah terisi dari keluaran itu.
  • /siswa menampilkan teks Halo dari index().
  • / otomatis pindah ke /siswa.
  • /siswa/1 kosong, /siswa/9999 menghasilkan 404, dan aku bisa menjelaskan kenapa.
  • php artisan test --filter=RuteSiswaTest → 4 test hijau.

Pertanyaan pemahaman

  1. Apa fungsi Route::resource? Berapa rute yang dibuatnya, dan rute mana yang tidak kita pakai di aplikasi ini?
  2. Apa beda alamat /siswa (GET) dengan /siswa (POST)? Method controller mana yang melayani masing-masing?
  3. Apa itu route model binding? Apa yang terjadi kalau id-nya tidak ada?
  4. Apa yang terjadi kalau Route::resource dihapus dan keenam rute yang kita pakai ditulis manual satu per satu? Apakah aplikasinya tetap jalan?

Tantangan

Tulis satu rute manual di bawah Route::resource, misalnya Route::get('/tentang', fn () => 'Aplikasi Les Cerdas Mandiri');, lalu buka /tentang dan jalankan php artisan route:list. Rute barumu muncul di mana? Setelah selesai, hapus lagi.

Kesalahan umum

Gejala Penyebab & solusi
Target class [App\Http\Controllers\SiswaController] does not exist Controller belum dibuat, atau use App\Http\Controllers\SiswaController; belum ditulis di web.php.
/siswa menghasilkan 404 Route::resource belum disimpan, atau salah ketik nama ('siswa').
route:list tidak menampilkan rute siswa Salah ketik pada --name=siswa, atau web.php belum disimpan.
/siswa/1 menghasilkan 404 padahal sudah seed Database kosong atau id berbeda. Cek Siswa::all() di tinker.
Perubahan di web.php tidak terlihat Simpan berkas (Ctrl+S) lalu muat ulang browser dengan Ctrl+F5.

➡️ Lanjut ke Bab 5 — Read: Daftar Siswa.

Tutorial Data Siswa Les — Laravel CRUD untuk les privat.

Kode boleh disalin, tapi coba ketik sendiri dulu: tangan yang mengetik lebih cepat paham.