Blade: Template Engine

Menulis tampilan dinamis dengan Blade: echo aman, direktif, loop, kondisi, dan form dengan @csrf.

Part 7 dari 26 ± 40 menit Gratis

Blade: HTML + sedikit sihir

Blade adalah template engine bawaan Laravel. Berkasnya berekstensi .blade.php di resources/views. Isinya HTML biasa yang diperkaya sintaks ringkas; Laravel mengompilasinya menjadi PHP murni dan menyimpan cache-nya, jadi sangat cepat.

return view('produk.index', ['produk' => $produk]);   // resources/views/produk/index.blade.php

Titik pada nama view (produk.index) mewakili sub-folder.

Menampilkan data: {{ }}

<h1>{{ $produk->nama }}</h1>
<p>Rp{{ number_format($produk->harga, 0, ',', '.') }}</p>
<p>Tahun: {{ now()->year }}</p>

{{ ... }} otomatis di-escape (karakter < > & diubah menjadi entitas HTML), sehingga aman dari serangan XSS. Untuk menampilkan HTML mentah yang kamu percayai: {!! $html !!} — hati-hati, jangan pernah dipakai untuk input pengguna.

Jika framework JavaScript juga memakai {{ }} (Vue/Alpine), awali dengan @: @{{ nama }} agar Blade membiarkannya.

Kondisi

@if ($produk->stok > 10)
    <span>Stok aman</span>
@elseif ($produk->stok > 0)
    <span>Hampir habis</span>
@else
    <span>Habis</span>
@endif

@unless ($user->aktif) Akun nonaktif @endunless
@isset($produk->diskon) ... @endisset
@auth Halo, {{ auth()->user()->name }} @endauth
@guest <a href="/login">Masuk</a> @endguest

Perulangan

@foreach ($produk as $item)
    <li>{{ $loop->iteration }}. {{ $item->nama }}</li>
@endforeach

@forelse ($produk as $item)
    <li>{{ $item->nama }}</li>
@empty
    <li>Belum ada produk.</li>
@endforelse

Di dalam loop tersedia objek $loop: index (mulai 0), iteration (mulai 1), first, last, count, dll. @forelse sangat praktis: ada bagian khusus saat datanya kosong.

Form dan keamanan

<form method="POST" action="{{ route('produk.store') }}">
    @csrf                               {{-- token CSRF wajib untuk POST/PUT/PATCH/DELETE --}}
    <input name="nama" value="{{ old('nama') }}">
    @error('nama') <small>{{ $message }}</small> @enderror
    <button>Simpan</button>
</form>

<form method="POST" action="{{ route('produk.update', $produk) }}">
    @csrf
    @method('PUT')                      {{-- menyamarkan POST sebagai PUT --}}
</form>

Tanpa @csrf Laravel menolak form dengan error 419 Page Expired. old('nama') mengembalikan input sebelumnya saat validasi gagal.

Komentar dan PHP

{{-- komentar Blade: tidak ikut ke HTML --}}
@php $total = $a + $b; @endphp

Menyertakan view lain

@include('partials.navbar')
@include('produk.kartu', ['produk' => $item])

Data ke JavaScript

<script>
  const data = @json($produk);     // meng-encode aman ke JSON
</script>

Layout, komponen, dan slot dibahas di bab berikutnya. Catatan: berkas Blade tidak berisi tag <?php, sehingga pemeriksa sintaks PHP selalu lolos; penilaian latihan Blade berdasarkan struktur yang kamu tulis.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X