Blade adalah template engine yang menemani setiap halaman yang kita susun, dan kekuatannya justru pada jumlah directive yang tidak terlalu banyak — sehingga bisa dihafal. Di balik layar, Blade mengompilasi tiap template menjadi file PHP biasa lalu menyimpan hasilnya di storage/framework/views sampai file template berubah; itulah sebabnya halaman Blade sama cepatnya dengan PHP murni. Chapter ini mengumpulkan directive dan variabel yang paling sering dipakai ke dalam satu kartu contekan, dengan contoh mini di tiap barisnya. Fondasi tiap kelompok sudah dibahas di section View dan Blade ; di sini kita fokus pada bentuk cepatnya ketika sedang menulis template dan lupa sintaksnya.

Echo dan Escaping #

SintaksKegunaanContoh
{{ $nama }}Echo dengan escaping HTMLHalo, {{ $user->name }}
{!! $html !!}Echo tanpa escaping (mentah){!! $kontenHtml !!}
@{{ nama }}Lewati rendering (frontend framework)@{{ pesan }}
@verbatim ... @endverbatimLewati render satu blok besarblok template Alpine/Vue

Aturan emasnya: mulai dari {{ }} selalu, dan hanya pakai {!! !!} bila kontennya memang HTML tepercaya — alasannya dibahas tuntas di Cross-Site Scripting .

Control Flow #

DirectiveKegunaanContoh
@if / @elseif / @else / @endifPercabangan@if ($tugas->selesai) ... @endif
@unless(...) @endunlessKebalikan @if@unless ($admin) ... @endunless
@isset(...) / @empty(...)Cek variabel / kosong@isset($catatan) ... @endisset
@foreach ... @endforeachIterasi array@foreach ($tugas as $t) ... @endforeach
@forelse ... @empty ... @endforelseIterasi + fallback kosong@forelse ($tugas as $t) ... @empty Tidak ada @endforelse
@continue / @breakKendali loop@if ($t->arsip) @continue @endif
@switch / @case / @endswitchPercabangan banyak@switch($status) @case('todo') ... @endswitch

Dari seluruh baris di atas, @forelse layak disebut kuda beban: directive ini menggabungkan iterasi dan kondisi kosong dalam satu blok, menghapus kebutuhan @if (count($tugas)) pembungkus. Untuk logika yang lebih rumit dari percabangan sederhana, ingat bahwa Blade tetap PHP — helper dan method boleh dipanggil langsung di dalam {{ }} — tetapi begitu logika mulai memakan tiga baris di template, pindahkan ke controller supaya template tetap berbicara soal tampilan, bukan soal keputusan. Pola ini dibahas di Conditional Rendering .

Variabel $loop #

Di dalam @foreach, Blade otomatis menyediakan objek $loop berisi metadata iterasi.

PropertiArtiPropertiArti
$loop->indexIndeks mulai 0$loop->countTotal iterasi
$loop->iterationNomor mulai 1$loop->remainingSisa iterasi
$loop->firstIterasi pertama?$loop->lastIterasi terakhir?
$loop->depthKedalaman loop bersarang$loop->parentLoop di atasnya

Mari kita lihat @forelse dan $loop bekerja nyata. Template berikut dirender di sandbox Course ini dengan data ['Belajar Laravel', 'Review kode']:

blade
@forelse ($tugas as $t)
  - {{ $loop->iteration }}. {{ $t }} (indeks {{ $loop->index }})
@empty
  Belum ada tugas.
@endforelse

Output yang Dihasilkan:

text
- 1. Belajar Laravel (indeks 0)
  - 2. Review kode (indeks 1)

Baris pertama bernomor 1 karena memakai iteration, sedangkan teks dalam kurung memakai index yang berawal dari nol — kombinasi keduanya adalah pola paling umum untuk penomoran daftar. Seluk-beluk looping dibahas di Looping di Blade .

Layout dan Include #

DirectiveKegunaanContoh
@extends('layouts.app')Turunkan layout induk@extends('layouts.app')
@section('judul') ... @endsectionDefinisi isi section@section('judul') Beranda @endsection
@yield('judul')Cetak isi section di layout<title>@yield('judul')</title>
@parentSelipkan isi induk@section('skrip') @parent ... @endsection
@include('partials.menu')Sisipkan sub-view@include('partials.menu', ['aktif' => 'beranda'])
@includeWhen($kondisi, ...)Sisip bersyarat@includeWhen($admin, 'partials.stat')
@once @endonceRender satu kali per requestuntuk blok <style> di partial

Mekanika warisan template ini dibedah di Template Inheritance dan Layouts dan Sections . Perlu dicatat bahwa dua gaya hidup berdampingan di aplikasi modern: warisan template (@extends) adalah gaya klasik yang tetap didukung penuh, sedangkan komponen adalah gaya yang kini lebih umum untuk aplikasi baru karena propertinya eksplisit dan mudah dipakai ulang lintas layout. Keduanya sah — pilih satu sebagai gaya utama proyek agar konsisten, lalu kuasai keduanya karena warisan masih banyak dipakai di aplikasi lama yang mungkin kita kelola suatu saat.

Komponen dan Slot #

SintaksKegunaanContoh
<x-alert ... />Panggil komponen<x-alert type="danger" :pesan="$e->getMessage()" />
@props([...])Deklarasi properti di komponen@props(['type' => 'info'])
$slotKonten default{{ $slot }}
<x-slot name="judul">Named slot<x-slot:tombol>Simpan</x-slot:tombol>
$attributes->merge([...])Gabung atribut HTML<div {{ $attributes->merge(['class' => 'card']) }}>

Komponen adalah cara modern menyusun UI berulang — lengkapnya di Components dan Slots dan Attributes .

Form dan Data #

DirectiveKegunaanContoh
@csrfHidden token CSRF di form<form method="POST"> @csrf
@method('PUT')Method HTTP tiruan<form method="POST"> @method('PUT')
@error('judul') ... @enderrorBlok error validasi@error('judul') <p>{{ $message }}</p> @enderror
old('judul')Nilai input terakhir<input value="{{ old('judul') }}">
@json($data)Data PHP → JSON literal<div data-tugas="@json($tugas)"></div>

Pola lengkap @csrf, old(), dan @error dalam satu form dibahas di Forms dan Old Input . Perlu dipahami mengapa @method ada: elemen form HTML hanya mengenal method GET dan POST, sehingga PUT, PATCH, dan DELETE harus diselundupkan sebagai field tersembunyi yang dibaca Laravel saat request masuk. Tanpa directive ini, form HTML biasa tidak akan pernah cocok dengan route ber-method PUT.

Stack dan Otorisasi #

DirectiveKegunaanContoh
@push('skrip') @endpushAntri konten ke stack@push('skrip') <script src="..."></script> @endpush
@stack('skrip')Cetak isi stack di layout@stack('skrip') sebelum </body>
@auth ... @endauthTampilkan untuk user login@auth Halo, {{ auth()->user()->name }} @endauth
@guest ... @endguestTampilkan untuk tamu@guest <a href="/login">Login</a> @endguest
@can('update', $tugas)Cek ability policy@can('update', $tugas) <a ...>Edit</a> @endcan

Directive @can adalah pintu otorisasi Blade yang merujuk gates dan policies — topiknya di Authorization di Blade .

Halaman tersusun dari template dan route yang menampilkannya. Kartu contekan berikutnya merangkum sisi yang mengarahkan request ke controller: Referensi Routing .