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(), dan with()
  • compact() adalah cara paling populer dan ringkas
  • Data diterima di Blade langsung sebagai variabel
  • Gunakan View::share atau 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.


ariq fadhil

Im Ariq Tech, a Top Rated Fullstack Developer with 5+ years of experience, delivering high-quality solutions across 50+ projects.