> 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-7-fitur-create-and-validasi/7.4-penjelasan-alur-tangkap-error.md).

# 7.4 Penjelasan Alur Tangkap Error

## Penjelasan alur tangkap error

Di subbab sebelumnya, Anda sudah menambahkan validasi ke form tambah buku.

Sekarang kita berhenti sebentar dari praktik menambah fitur.

Di sini fokus kita adalah memahami apa yang sebenarnya terjadi saat validasi gagal.

Bagian ini penting sekali.

Karena banyak siswa bisa menyalin kode validasi, tetapi belum benar-benar paham alur error-nya.

### Teori awal dan analogi

Bayangkan Anda menyerahkan formulir ke petugas perpustakaan.

Petugas mengecek formulir itu.

Kalau ada kolom yang kosong, petugas tidak membuang formulirnya.

Petugas mengembalikan formulir itu ke Anda sambil memberi tanda pada bagian yang salah.

Lalu Anda tinggal memperbaiki bagian yang kurang.

Laravel melakukan hal yang mirip.

Kalau validasi gagal, Laravel tidak langsung mematikan halaman begitu saja.

Laravel mengembalikan pengguna ke form, membawa pesan error, dan menyimpan input lama.

### Hal besar yang perlu dipahami

Saat validasi gagal, Laravel biasanya melakukan tiga hal sekaligus:

* kembali ke halaman form sebelumnya
* menyimpan pesan error ke session
* menyimpan input lama ke session

Karena itu, form bisa menampilkan dua hal penting:

* pesan kesalahan
* data lama yang tadi sudah diketik

### Langkah praktik untuk memahami alurnya

Ikuti langkah ini pelan-pelan.

{% stepper %}
{% step %}

### Pastikan kode validasi dari 7.3 sudah aktif

Sebelum lanjut, cek dulu bahwa method `store()` Anda sudah memakai validasi.

Contohnya seperti ini:

```php
$validated = $request->validate([
    'judul' => 'required|string|max:255',
    'penulis' => 'required|string|max:255',
    'penerbit' => 'required|string|max:255',
    'tahun_terbit' => 'required|digits:4',
]);
```

Tanpa validasi aktif, Anda tidak akan melihat alur tangkap error ini bekerja.
{% endstep %}

{% step %}

### Pastikan form memakai `old()` dan `@error()`

Buka file:

`resources/views/buku/create.blade.php`

Pastikan pola field Anda mirip seperti ini:

```blade
<input type="text" name="judul" value="{{ old('judul') }}">
@error('judul')
    <small>{{ $message }}</small>
@enderror
```

Bagian ini yang membuat input lama dan pesan error bisa tampil.
{% endstep %}

{% step %}

### Coba sengaja kirim form yang salah

Sebelum mengetes, pastikan server Laravel hidup.

Silakan pilih salah satu:

* buka **Laragon** lalu klik **Start All**
* atau jalankan `php artisan serve`

Setelah itu, buka halaman:

```
http://127.0.0.1:8000/buku/create
```

Lalu lakukan percobaan ini:

* isi `judul`
* kosongkan `penulis`
* kosongkan `penerbit`
* isi `tahun_terbit` dengan `20`

Lalu klik **Simpan**.
{% endstep %}

{% step %}

### Amati apa yang terjadi

Kalau validasi bekerja, Anda akan melihat:

* halaman kembali ke form
* input `judul` tetap terisi
* field yang salah menampilkan pesan error
* data tidak disimpan ke database

Inilah bukti bahwa Laravel sedang menangkap error dengan rapi.
{% endstep %}
{% endstepper %}

### Penjelasan pasca-praktik

Sekarang mari kita urutkan alurnya.

#### 1. Request masuk ke `store()`

Saat tombol **Simpan** ditekan, browser mengirim semua isi form ke method `store()`.

Di titik ini, Laravel sudah menerima semua data yang diketik pengguna.

#### 2. Laravel menjalankan validasi

Method `$request->validate()` langsung memeriksa semua aturan yang Anda tulis.

Kalau ada satu saja yang gagal, proses simpan berhenti di sini.

#### 3. Laravel melakukan redirect otomatis

Anda tidak menulis `return back()` secara manual.

Tetapi Laravel melakukannya secara otomatis saat validasi gagal.

Itulah kenapa pengguna kembali ke halaman form sebelumnya.

#### 4. Error disimpan sementara

Laravel menyimpan pesan error ke session.

Lalu view bisa membacanya lewat `@error(...)`.

#### 5. Input lama juga disimpan sementara

Laravel juga menyimpan nilai input yang tadi sempat diketik.

Karena itu, `old('judul')` masih bisa menampilkan nilai lama.

### Kenapa ini penting untuk pengalaman pengguna

Kalau form selalu kosong lagi setiap terjadi error, pengguna akan cepat kesal.

Mereka harus mengetik ulang semuanya dari awal.

Dengan mekanisme ini, pengguna hanya perlu memperbaiki bagian yang salah.

Itu jauh lebih manusiawi.

### Potongan kode yang paling penting

#### `old('judul')`

Fungsi ini mengambil nilai input lama dari session.

Kalau sebelumnya pengguna menulis `Laravel Dasar`, nilai itu bisa muncul lagi.

#### `@error('judul')`

Directive ini memeriksa apakah field `judul` punya error.

Kalau ada, pesan error akan ditampilkan.

#### `$errors`

Di balik layar, Laravel sebenarnya membawa kumpulan error ke view.

`@error` hanyalah cara yang lebih ringkas untuk membaca error tertentu.

### Troubleshooting yang paling sering

Masalah yang paling sering muncul:

* **input lama tidak muncul** — `old()` belum dipasang
* **pesan error tidak tampil** — `@error()` tidak ada atau nama field tidak cocok
* **data tetap tersimpan padahal salah** — validasi belum aktif atau aturan salah
* **form kembali kosong semua** — input belum memakai `value="{{ old(...) }}"`

{% hint style="warning" %}
Kalau nama field pada `old()` atau `@error()` tidak sama dengan nama input, hasilnya tidak akan muncul.
{% endhint %}

{% hint style="info" %}
Error yang tertangkap dengan rapi bukan tanda aplikasi rusak. Itu justru tanda sistem validasi bekerja dengan benar.
{% endhint %}

### Poin evaluasi bab 7.4

Pastikan Anda sudah memahami poin berikut:

* Saya paham Laravel akan redirect otomatis saat validasi gagal.
* Saya paham pesan error dibawa kembali ke form lewat session.
* Saya paham `old()` dipakai untuk menampilkan input lama.
* Saya paham `@error()` dipakai untuk menampilkan pesan error per field.
* Saya paham data yang gagal validasi tidak boleh langsung disimpan.

Jika semuanya sudah jelas, lanjut ke [7.5 Mengatasi Error 419 Page Expired](/laravel/bab-7-fitur-create-and-validasi/7.5-mengatasi-error-419-page-expired.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-7-fitur-create-and-validasi/7.4-penjelasan-alur-tangkap-error.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.
