Views menyediakan cara yang nyaman untuk meletakkan semua kode HTML aplikasi di dalam file-file terpisah.
Tujuan: Memisahkan logika aplikasi/controller dari logika presentasi (tampilan). Daripada mengembalikan string HTML langsung dari rute, kita mengembalikan view.
Lokasi: Disimpan di direktori resources/views/.
Templating: Dibuat menggunakan templating engine bawaan Laravel, yaitu Blade.
Mengembalikan View dari Rute:
Kita menggunakan fungsi helperview():
Route::get('/', function () { return view('greeting', ['name' => 'James']);});
Parameter Fungsi view():
Argumen pertama adalah nama file view di resources/views/. (Ekstensi .blade.php tidak perlu ditulis).
Argumen kedua adalah array berisi data yang ingin kita sediakan untuk view tersebut. Dalam view, data ini dapat diakses sebagai variabel (misal: $name).
Nested View Directory:View dapat disimpan di dalam sub-direktori. Kita dapat mengaksesnya menggunakan notasi “titik” (.).
Blok Verbatim: Untuk blok HTML besar yang tidak boleh di-render.
@verbatim <div class="container">{{ name }}</div>@endverbatim`
### Blade Directives: Kondisional
- **`@if / @elseif / @else / @endif`**: Struktur kondisional standar.
- **`@unless`**: Kebalikan dari `@if`. Kode di dalamnya dieksekusi jika kondisi *false*.
```php
@unless (Auth::check())
You are not signed in.
@endunless
```
- **`@isset` / `@empty`**: Memeriksa apakah variabel ada (dan tidak *null*) atau "kosong".
### Blade Directives: Loops (Perulangan)
- **`@for`**: `for` loop standar PHP.
- **`@foreach`**: `foreach` loop standar PHP.
- **`@while`**: `while` loop standar PHP.
- **`@forelse`**: *Directive* yang sangat berguna. Ini menggabungkan `foreach` dengan pemeriksaan `@empty`.
```php
@forelse ($users as $user)
<li>{{ $user->name }}</li>
@empty
<p>No users</p>
@endforelse
```
Summary
Views di Laravel bertugas untuk memisahkan logika presentasi (HTML) dari logika aplikasi, dan disimpan di resources/views/. Laravel menggunakan templating engineBlade yang kuat, yang mengkompilasi template (.blade.php) menjadi PHP murni dan menyimpannya dalam cache untuk performa tinggi. Blade menyediakan sintaks directive yang bersih (seperti {{ $data }} untuk menampilkan data secara aman, @if untuk kondisional, dan @foreach / @forelse untuk perulangan) agar penulisan template menjadi lebih mudah dan bersih daripada menggunakan PHP biasa.
Additional Information
Topik Teknis: Keamanan {{ }} vs. {!! !!}
Seperti yang disebutkan, {{ $name }} akan membersihkan (melakukan escaping) semua output.
Browser akan menampilkan teks <script>... tersebut, bukan mengeksekusinya. Ini adalah perlindungan otomatis terhadap serangan XSS (Cross-Site Scripting).
Jika Anda sangat yakin bahwa data Anda aman dan Anda ingin me-render HTML (misalnya, dari rich text editor), Anda dapat menggunakan sintaks:
{!! $htmlContent !!}
Gunakan ini dengan sangat hati-hati.
Topik Teknis: @isset vs @empty
Sangat penting untuk memahami perbedaan antara @isset dan @empty dalam konteks PHP.
@isset($records): Akan bernilai true jika $records didefinisikan dan bukan null. Sebuah array kosong [] akan dianggap true oleh isset.
@empty($records): Akan bernilai true jika variabel tersebut dianggap “kosong”.
Kondisi “kosong” meliputi:
null
false
0 (integer 0)
"" (string kosong)
[] (array kosong)
Inilah mengapa @forelse sangat berguna, karena ia menggunakan logika @empty (memeriksa apakah array-nya kosong), bukan @isset.