@include: Pecah View Jadi Bagian Kecil
Gunakan @include dan @each untuk view yang modular.
Analogi: Bongkar Pasang Puzzle
Bayangkan layout-mu adalah puzzle 1000 keping yang sudah jadi gambar utuh. Suatu hari kamu mau mengganti bagian langitnya saja. Kamu tidak akan membongkar seluruh puzzle, kamu cuma melepas kepingan langit dan menggantinya.
@include itu cara "melepas kepingan" dari view raksasa. Navbar, footer, sidebar, dan kartu produk masing-masing jadi file kecil (partial) yang bisa disisipkan ke view mana pun. View induk tetap ramping dan mudah dibaca, dan setiap partial bisa diedit tanpa menyentuh file lain.
Kenapa @include Ada?
File view yang panjangnya 500 baris itu mimpi buruk: scroll ke atas-bawah cuma untuk mencari satu tombol, dan merge conflict jadi sering. Memecahnya jadi partial membuat setiap file punya satu tanggung jawab yang jelas. Bonusnya: partial yang sama (misalnya footer) bisa dipakai ulang di banyak layout tanpa copy-paste.
Contoh 1: @include untuk Partial Statis
Pecah layout menjadi potongan kecil:
File: resources/views/partials/navbar.blade.php
<nav class="navbar">
<a href="/" class="{{ request()->is('/') ? 'active' : '' }}">Beranda</a>
<a href="/tentang" class="{{ request()->is('tentang') ? 'active' : '' }}">Tentang</a>
</nav>File: resources/views/partials/footer.blade.php
<footer>
<p>© {{ $tahun }} Website Saya. Dibuat dengan Laravel.</p>
</footer>File: resources/views/layouts/app.blade.php
<!DOCTYPE html>
<html>
<head>
<title>@yield('title', 'Website Saya')</title>
</head>
<body>
@include('partials.navbar')
<main>
@yield('content')
</main>
@include('partials.footer', ['tahun' => 2026])
</body>
</html>Variabel dari view induk otomatis tersedia di partial, tapi mengirim secara eksplisit (['tahun' => 2026]) lebih jelas: siapa pun yang membaca partial tahu persis data apa yang dibutuhkannya tanpa harus menelusuri view induk.
Contoh 2: @each untuk Render Koleksi
Kasus klasik: menampilkan daftar kartu produk. Tanpa @each, view-mu berisi loop yang membungkus include:
{{-- cara manual, bertele-tele --}}
@foreach ($produks as $produk)
@include('partials.produk-card', ['produk' => $produk])
@endforeach@each memadatkan semuanya jadi satu baris:
File: resources/views/partials/produk-card.blade.php
<div class="produk-card">
<h3>{{ $produk->nama }}</h3>
<p>Rp {{ number_format($produk->harga, 0, ',', '.') }}</p>
</div>File: resources/views/partials/produk-kosong.blade.php
<p>Belum ada produk. Cek lagi nanti ya!</p>Pemakaian:
@each('partials.produk-card', $produks, 'produk', 'partials.produk-kosong')Empat argumennya berurutan: (1) nama view untuk tiap item, (2) koleksi/array, (3) nama variabel item di dalam partial, (4) view yang ditampilkan kalau koleksinya kosong (opsional). Bersih dan tanpa @forelse manual.
Kesalahan Umum Pemula
1. Salah: over-include sampai struktur sulit dilacak
{{-- layouts/app.blade.php --}}
@include('partials.head')
@include('partials.navbar')
@yield('content')
@include('partials.sidebar')
@include('partials.footer')
@include('partials.scripts')Enam level include untuk satu halaman. Mau debug tampilan? Kamu harus membuka 7 file. Include itu untuk partial yang memang berdiri sendiri (navbar, footer), bukan untuk memecah halaman menjadi serpihan tak terlacak.
Benar: pakai @include untuk partial yang dipakai ulang di banyak tempat. Untuk potongan yang butuh props atau logika, pertimbangkan component (<x-...>).
2. Salah: mengandalkan variabel induk yang tidak jelas
{{-- partials/produk-card.blade.php memakai $diskon... --}}
<p>Diskon: {{ $diskon }}%</p>...yang ternyata cuma tersedia di satu view induk tertentu. Di view lain yang me-include partial ini, error Undefined variable $diskon.
Benar: kirim eksplisit.
@include('partials.produk-card', ['produk' => $produk, 'diskon' => 10])3. Salah: tertukar urutan argumen @each
{{-- SALAH: koleksi dan nama view tertukar --}}
@each($produks, 'partials.produk-card', 'produk')Urutan yang benar: view dulu, lalu data. @each('partials.produk-card', $produks, 'produk'). Kalau tertukar, error-nya bisa membingungkan karena Laravel mencoba me-render koleksi sebagai nama view.
Catatan teknis:
@includemewarisi semua variabel view induk secara otomatis (kecuali kamu membatasinya). Kalau butuh isolasi penuh, ada@includeFirst(pilih view pertama yang ada dari daftar) dan kamu bisa membungkus partial dalam component agar datanya eksplisit lewat props.
Include Bersyarat: @includeIf dan @includeWhen
Tidak semua partial selalu ada atau selalu perlu ditampilkan. Daripada membungkus @include dengan @if, Blade punya directive khusus:
{{-- tampilkan hanya jika user sudah login --}}
@includeWhen(auth()->check(), 'partials.menu-user')
{{-- tampilkan kecuali sedang di halaman login --}}
@includeUnless(request()->is('login'), 'partials.promo-banner')
{{-- include hanya jika file view-nya ADA (tidak error kalau hilang) --}}
@includeIf('partials.iklan-' . $posisi)@includeIf berguna untuk partial opsional seperti banner iklan per posisi halaman: kalau file partials/iklan-sidebar.blade.php tidak ada, halaman tetap jalan tanpa error. Pola ini menjaga view tetap tangguh saat partial-nya belum dibuat atau sudah dihapus.
Tantangan
Partialisasi
Pecah layout blog-mu: pindahkan navbar ke partials/navbar.blade.php dan footer ke partials/footer.blade.php. Layout induk tinggal @include keduanya. Pastikan halaman tetap tampil sama.
Kuis Bab
Uji pemahamanmu: Bab 3: Blade Template
Jawab 5 soal berikut, lalu tekan "Periksa Jawaban".
1.Apa beda {{ }} dan {!! !!}?
2.Directive apa yang menggabungkan foreach + empty check?
3.Apa itu $slot dalam component?
4.Pasangan yang benar untuk layout inheritance?
5.Kapan memakai @include vs component?