> For the complete documentation index, see [llms.txt](https://learn.devlabss.my.id/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://learn.devlabss.my.id/laravel/bab-2-mengenal-routing/2.3-mengirim-data-dari-route.md).

# 2.3 Mengirim Data dari Route

## Mengirim data ke route lewat URL

Tidak semua route memakai URL yang selalu tetap.

Kadang route perlu menerima data langsung dari URL, misalnya ID buku atau nama siswa.

Di Laravel, pola ini memakai **route parameter**.

### Apa itu route parameter

Route parameter adalah bagian URL yang nilainya bisa berubah.

Laravel menangkap nilai itu lalu mengirimkannya ke route.

Contoh paling sederhana:

* `/buku/12`
* `/buku/75`
* `/siswa/budi`

Pada pola ini, angka `12`, `75`, atau teks `budi` adalah data yang dikirim lewat URL.

### Parameter wajib dan opsional

Ada dua bentuk yang paling sering dipakai:

* **parameter wajib** — route harus menerima nilai
* **parameter opsional** — route tetap jalan walau nilai tidak ada

Contoh penulisannya:

* `{id}` untuk parameter wajib
* `{nama?}` untuk parameter opsional

{% hint style="info" %}
Gunakan nama parameter yang jelas, misalnya `{id}`, `{slug}`, atau `{nama}`.
{% endhint %}

### Sebelum mulai

Pastikan kondisi berikut sudah siap:

* proyek `e-library` sudah terbuka di VS Code
* file `routes/web.php` bisa diedit
* Anda sudah paham route `GET` dari bab sebelumnya

### Menulis route parameter di `web.php`

Tambahkan kode berikut di bagian bawah file `routes/web.php`.

```php
Route::get('/buku/{id}', function ($id) {
    return 'Kamu sedang membuka data buku dengan ID nomor: ' . $id;
});

Route::get('/siswa/{nama?}', function ($nama = 'Pengunjung') {
    return 'Selamat datang di perpustakaan, ' . $nama;
});
```

Lalu simpan file dengan `Ctrl + S.`

### Nyalakan server sebelum menguji URL

Sebelum membuka browser, pastikan server Laravel sedang berjalan.

{% stepper %}
{% step %}

### Opsi 1 — lewat Laragon

Buka **Laragon**.

Klik **Start All** jika service belum aktif.

Pastikan Apache dan MySQL berstatus aktif.
{% endstep %}

{% step %}

### Opsi 2 — lewat terminal proyek

Gunakan opsi ini jika alamat `.test` tidak bisa dibuka.

Buka terminal di folder proyek `e-library`, lalu jalankan:

```bash
php artisan serve
```

Jika berhasil, Laravel akan menampilkan alamat seperti:

```
http://127.0.0.1:8000
```

{% endstep %}
{% endstepper %}

{% hint style="warning" %}
Jika Anda memakai `php artisan serve`, jangan tutup terminalnya saat pengujian masih berjalan.
{% endhint %}

### Menguji parameter wajib

Sekarang uji route `/buku/{id}`.

1. Buka browser.
2. Jika memakai Laragon, akses `http://e-library.test/buku/12`.
3. Jika memakai `php artisan serve`, akses `http://127.0.0.1:8000/buku/12`.

Jika berhasil, browser menampilkan:

```
Kamu sedang membuka data buku dengan ID nomor: 12
```

Coba ganti `12` menjadi `75`.

Hasil di layar ikut berubah karena Laravel mengambil nilai dari URL.

### Menguji parameter opsional

Sekarang uji route `/siswa/{nama?}`.

Tes dua alamat berikut:

* `http://e-library.test/siswa/budi`
* `http://e-library.test/siswa`

Jika memakai `php artisan serve`, ganti domainnya menjadi `http://127.0.0.1:8000`.

Hasil yang seharusnya muncul:

* `/siswa/budi` menampilkan `Selamat datang di perpustakaan, budi`
* `/siswa` menampilkan `Selamat datang di perpustakaan, Pengunjung`

Ini terjadi karena parameter `nama` bersifat opsional dan sudah punya nilai default.

### Bagaimana data dari URL masuk ke route

Perhatikan potongan route ini:

```php
Route::get('/buku/{id}', function ($id) {
    return 'Kamu sedang membuka data buku dengan ID nomor: ' . $id;
});
```

Alurnya sederhana:

1. Browser membuka URL seperti `/buku/12`.
2. Laravel menangkap nilai `12` dari posisi `{id}`.
3. Nilai itu dimasukkan ke variabel `$id`.
4. Route menggabungkan teks dengan isi `$id`.
5. Hasilnya dikirim kembali ke browser.

### Kapan route menampilkan 404

Parameter wajib harus selalu diisi.

Jika Anda membuka `/buku/` tanpa nilai setelahnya, Laravel menganggap route tidak lengkap.

Akibatnya, browser bisa menampilkan `404 Not Found`.

{% hint style="warning" %}
Jika parameter wajib kosong, masalahnya bukan pada server. Masalahnya ada pada URL yang tidak sesuai pola route.
{% endhint %}

### Output yang harus terlihat

Setelah subbab ini selesai, hasil berikut seharusnya sudah terlihat:

* route `/buku/{id}` menampilkan nilai ID yang berubah sesuai URL
* route `/siswa/{nama?}` menampilkan nama dari URL atau `Pengunjung`
* URL `/buku/12` dan `/buku/75` memberi hasil berbeda
* URL `/buku/` tanpa parameter wajib memicu `404 Not Found`

### Poin evaluasi bab 2.3

Pastikan Anda sudah memahami poin berikut:

* Saya paham route parameter dipakai untuk menerima data dari URL.
* Saya tahu perbedaan parameter wajib dan parameter opsional.
* Saya berhasil menambahkan route `/buku/{id}` di `routes/web.php`.
* Saya berhasil menambahkan route `/siswa/{nama?}` di `routes/web.php`.
* Saya tahu server harus aktif sebelum menguji URL di browser.
* Saya berhasil mengubah hasil route dengan mengganti nilai di URL.
* Saya paham kenapa `/buku/` bisa berujung ke `404 Not Found`.

Jika semua sudah jelas, lanjut ke [2.4 Penjelasan Alur Request-Response](/laravel/bab-2-mengenal-routing/2.4-penjelasan-alur-request-response.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://learn.devlabss.my.id/laravel/bab-2-mengenal-routing/2.3-mengirim-data-dari-route.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
