> 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-11-logika-transaksi-peminjaman/11.3-mengunci-tombol-jika-stok-habis.md).

# 11.3 Mengunci Tombol Jika Stok Habis

## Mengunci tombol jika stok habis

Setelah logika backend beres, sekarang kita rapikan sisi tampilan.

Targetnya jelas.

Kalau stok buku habis, pengguna harus langsung melihat bahwa buku itu tidak bisa dipinjam.

### Kenapa bagian ini penting

Controller memang tetap menjadi penjaga utama.

Tetapi tampilan yang jelas membuat pengguna tidak salah klik.

Ini membuat aplikasi terasa lebih rapi dan lebih masuk akal.

### Logika kondisi di Blade

Misalnya pada tabel daftar buku, Anda punya tombol pinjam di setiap baris.

Kondisinya bisa dibuat seperti ini:

```php
@if ($buku->stok > 0)
    <form action="{{ url('/peminjaman/' . $buku->id) }}" method="POST">
        @csrf
        <button type="submit">Pinjam</button>
    </form>
@else
    <button disabled>Stok Habis</button>
@endif
```

Logika ini sederhana:

* jika stok masih ada, tampilkan tombol pinjam
* jika stok habis, tampilkan tombol nonaktif

### Menampilkan informasi stok

Jangan hanya mengandalkan tombol.

Tampilkan juga angka stok agar pengguna paham kondisinya.

Contoh:

```php
<td>{{ $buku->stok }}</td>
```

Kalau ingin lebih jelas, Anda bisa menambahkan label kondisi:

```php
@if ($buku->stok > 0)
    <span>Tersedia</span>
@else
    <span>Habis</span>
@endif
```

### Alur pengalaman pengguna

Saat tampilan sudah mengikuti stok, pengalaman pengguna jadi lebih enak:

1. user melihat daftar buku
2. user langsung tahu buku mana yang masih tersedia
3. user tidak buang waktu menekan tombol yang sebenarnya gagal

Ini hal kecil, tetapi sangat penting dalam aplikasi nyata.

### Tetap ingat batas tanggung jawab view

View hanya membantu komunikasi ke pengguna.

View bukan tempat keamanan utama.

Artinya:

* Blade boleh menyembunyikan tombol
* Blade boleh menampilkan label `Habis`
* Blade tidak boleh menjadi satu-satunya penjaga aturan

Controller tetap wajib mengecek stok lagi.

{% hint style="warning" %}
Kalau Anda hanya menonaktifkan tombol di Blade, orang masih bisa mencoba request langsung ke route. Karena itu, validasi stok di controller tetap wajib.
{% endhint %}

### Contoh tampilan yang lebih rapi

Supaya lebih enak dibaca, pola tabel bisa seperti ini:

```php
<td>{{ $buku->judul }}</td>
<td>{{ $buku->stok }}</td>
<td>
    @if ($buku->stok > 0)
        <form action="{{ url('/peminjaman/' . $buku->id) }}" method="POST">
            @csrf
            <button type="submit">Pinjam</button>
        </form>
    @else
        <button disabled>Stok Habis</button>
    @endif
</td>
```

Kalau stok berubah menjadi `0` setelah transaksi, maka saat halaman dimuat ulang tombol akan otomatis ikut berubah.

### Sebelum mengetes tampilan

Pastikan beberapa hal ini sudah siap:

* server lokal masih berjalan
* data buku punya nilai stok yang berbeda
* route pinjam sudah aktif
* user sudah login

Dengan begitu Anda bisa membandingkan:

* buku dengan stok `3`
* buku dengan stok `1`
* buku dengan stok `0`

### Error yang paling sering muncul

Biasanya masalah ada di bagian berikut:

* nama variabel di Blade tidak sesuai
* kolom `stok` belum ikut dikirim ke view
* halaman belum direfresh setelah transaksi
* tombol nonaktif sudah benar, tetapi controller belum memvalidasi stok

{% hint style="info" %}
Kalau tampilan belum berubah setelah peminjaman, cek lagi query data pada controller. Pastikan halaman membaca data stok terbaru dari database.
{% endhint %}

### Output yang harus terlihat

Setelah subbab ini selesai, hasil berikut seharusnya sudah terlihat:

* daftar buku menampilkan angka stok
* buku dengan stok lebih dari `0` menampilkan tombol **Pinjam**
* buku dengan stok `0` menampilkan tombol **Stok Habis** yang nonaktif
* setelah transaksi pinjam, tampilan stok ikut berubah saat halaman dimuat ulang

### Poin evaluasi bab 11.3

Pastikan Anda sudah memahami hal berikut:

* Saya bisa menampilkan nilai stok di Blade.
* Saya bisa membuat kondisi `@if` berdasarkan stok.
* Saya paham tombol nonaktif hanya membantu UI.
* Saya paham controller tetap menjadi penjaga aturan utama.

Jika sudah siap, lanjut ke [11.4 Penjelasan Manipulasi Dua Tabel](/laravel/bab-11-logika-transaksi-peminjaman/11.4-penjelasan-manipulasi-dua-tabel.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-11-logika-transaksi-peminjaman/11.3-mengunci-tombol-jika-stok-habis.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.
