Tutorial Laravel #8: Mengirim Data dari Controller ke View
1. Cara-cara Mengirim Data ke View
Di Laravel, ada beberapa cara untuk mengirim data dari controller ke view. Semuanya valid, pilih yang paling nyaman dan konsisten di project kamu.
2. Cara 1 - Array Biasa
public function index()
{
return view('artikel.index', [
'judul' => 'Daftar Artikel',
'artikels' => Artikel::all(),
'total' => Artikel::count(),
]);
}
3. Cara 2 - compact()
Cara paling populer - compact() otomatis membuat array dari nama variabel:
public function index()
{
$judul = 'Daftar Artikel';
$artikels = Artikel::all();
$total = Artikel::count();
return view('artikel.index', compact('judul', 'artikels', 'total'));
// Sama persis dengan cara 1 di atas
}
4. Cara 3 - Method with()
public function index()
{
return view('artikel.index')
->with('artikels', Artikel::all())
->with('total', Artikel::count());
// Atau kirim semua sekaligus
return view('artikel.index')->with([
'artikels' => Artikel::all(),
'total' => Artikel::count(),
]);
}
5. Menerima Data di View Blade
<!-- resources/views/artikel/index.blade.php -->
@extends('layouts.app')
@section('title', $judul)
@section('content')
<h1>{{ $judul }}</h1>
<p>Total artikel: {{ $total }}</p>
<table class="table">
<thead>
<tr><th>#</th><th>Judul</th><th>Status</th></tr>
</thead>
<tbody>
@forelse($artikels as $artikel)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $artikel->judul }}</td>
<td>{{ $artikel->status }}</td>
</tr>
@empty
<tr><td colspan="3">Belum ada artikel.</td></tr>
@endforelse
</tbody>
</table>
@endsection
6. View::share - Data Global ke Semua View
Untuk data yang perlu ada di semua view (seperti info user login, menu navigasi, dsb), gunakan View::share di Service Provider:
<?php
// app/Providers/AppServiceProvider.php
namespace AppProviders;
use IlluminateSupportServiceProvider;
use IlluminateSupportFacadesView;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
// Data ini tersedia di SEMUA view
View::share('appName', config('app.name'));
// Bisa juga gunakan View Composer
View::composer('layouts.app', function ($view) {
$view->with('totalNotifikasi', 5);
});
}
}
7. Mengakses Data di Blade dengan @
<!-- Tampilkan nilai variabel -->
{{ $nama }}
<!-- Nilai default jika null -->
{{ $nama ?? 'Guest' }}
{{ $artikel->deskripsi ?? 'Tidak ada deskripsi' }}
<!-- Method pada object/collection -->
{{ $artikel->created_at->format('d M Y') }}
{{ Str::limit($artikel->konten, 150) }}
{{ number_format($produk->harga, 0, ',', '.') }}
8. Ringkasan
- Tiga cara kirim data ke view: array biasa,
compact(), danwith() compact()adalah cara paling populer dan ringkas- Data diterima di Blade langsung sebagai variabel
- Gunakan
View::shareatau View Composer untuk data yang perlu ada di semua view - Operator
??berguna untuk nilai default jika variabel null
Tutorial berikutnya membahas request, input, dan validasi dasar di Laravel.
.jpg)
