laravel passing data controller view | java php laravel linux mysql sql bootstrap html css query java php laravel linux mysql sql bootstrap html css query: laravel passing data controller view

Saturday, April 11, 2026

laravel passing data controller view

📚 Seri Belajar Laravel Lengkap — Artikel 9 dari 50

Passing Data dari Controller
ke View dengan Benar

Controller sudah mengolah data, View sudah siap tampil — tapi bagaimana cara keduanya "bicara"? Artikel ini membongkar semua metode passing data di Laravel, dari yang paling sederhana sampai yang paling pro.

#Laravel #Controller #BladeView #PHP #BelajarLaravel
⏱️ Estimasi baca: 13 menit
🎯 Level: Pemula → Menengah
📅 Diperbarui: 2025

Pernah bikin Controller yang sudah capek-capek ngolah data dari database, terus pas datanya mau ditampilkan di View — bingung gimana cara kirimnya? Kamu nulis return view('halaman') tapi variabelnya ke mana perginya? Itu pertanyaan yang hampir semua pemula Laravel pernah hadapi. Di sini, dalam seri 50 Artikel Belajar Laravel, kita sudah memahami routing Laravel sebagai pintu masuk request, dan Controller sebagai pemroses logika. Sekarang, kita akan kuasai jembatan penting antara keduanya: cara mengirimkan data dari Controller ke View secara benar dan efisien.

Ada lebih dari satu cara untuk melakukan ini — dan masing-masing punya waktu dan tempat yang tepat. Kalau kamu salah pilih metode, kodenya masih jalan, tapi bisa jadi susah dibaca dan dirawat di kemudian hari. Yuk kita bedah satu per satu!

🧩 Konsep Inti yang Harus Kamu Pahami

Dalam arsitektur MVC Laravel, Controller dan View adalah dua lapisan yang terpisah — Controller tidak bisa "menulis langsung" ke View, dan View tidak bisa "menarik paksa" data dari Controller. Satu-satunya jembatan resmi adalah fungsi view() yang dipanggil di akhir method Controller, dengan data yang dimasukkan sebagai argumen kedua.

📦 Tiga Metode Passing Data: Pilih yang Pas untuk Routing Laravel Kamu

Anggap Controller kamu sebagai seorang kurir yang sudah mengumpulkan semua barang pesanan. View adalah rumah pelanggan. Nah, pertanyaannya: bagaimana cara kurir itu mengantar barang? Bisa ditenteng satu per satu, bisa dimasukkan kardus, atau bisa juga pakai koper khusus. Laravel menyediakan tiga cara utama — dan ketiganya valid, tergantung situasi.

Metode Sintaks Keunggulan Ideal Dipakai
Array Langsung view('nama', [...]) Eksplisit & mudah dibaca Data sedikit (1–3 variabel)
compact() view('nama', compact(...)) Ringkas, nama otomatis Banyak variabel lokal
with() view('nama')->with(...) Chainable, fleksibel Menambah data secara bertahap
View::share() View::share('key', $val) Global ke semua View Data yang sama di banyak halaman
💡
TIPS: Tidak Ada Metode yang "Terbaik" Secara Universal

Gunakan array langsung untuk kejelasan saat review kode. Gunakan compact() saat variabelnya banyak dan sudah terdefinisi. Gunakan with() saat kamu perlu menambah data secara kondisional. Konsistensi dalam satu project jauh lebih penting daripada memilih yang "terbaik".

🛠️ Praktik Langsung: Implementasi dari Routing Laravel hingga View

Cukup teori — sekarang kita praktek. Kita akan bangun alur lengkap: dari routing Laravel mendefinisikan URL, Controller memproses data, sampai View menampilkan hasilnya. Bayangkan kita sedang membangun halaman profil pengguna sederhana.

1

Definisikan Route di web.php

Langkah pertama selalu dari routing Laravel. Kita daftarkan URL dan arahkan ke method Controller yang tepat.

routes/web.php
use App\Http\Controllers\ProfilController;
use Illuminate\Support\Facades\Route;

// Route mengarah ke ProfilController@tampilkan
Route::get('/profil/{id}', [ProfilController::class, 'tampilkan'])
     ->name('profil.tampilkan');
2

Metode 1 — Passing Data dengan Array Langsung

Cara paling eksplisit: masukkan data sebagai array asosiatif di argumen kedua fungsi view(). Key array menjadi nama variabel di View.

app/Http/Controllers/ProfilController.php
namespace App\Http\Controllers;

class ProfilController extends Controller
{
    public function tampilkan($id)
    {
        // Simulasi data (nanti bisa dari database)
        $nama  = 'Rina Kartika';
        $email = 'rina@example.com';
        $kota  = 'Bandung';

        // ✅ Cara 1: Array Langsung
        return view('profil.tampilkan', [
            'nama'  => $nama,
            'email' => $email,
            'kota'  => $kota,
            'userId' => $id,
        ]);
    }
}
3

Metode 2 — Passing Data dengan compact()

compact() adalah fungsi PHP bawaan yang mengubah variabel lokal menjadi array asosiatif secara otomatis. Nama variabelnya langsung menjadi key — kamu tidak perlu mengetiknya dua kali. Ini favoritnya developer Laravel!

ProfilController.php — menggunakan compact()
public function tampilkan($id)
{
    $nama    = 'Rina Kartika';
    $email   = 'rina@example.com';
    $kota    = 'Bandung';
    $hobi    = ['Membaca', 'Coding', 'Berkebun'];

    // ✅ Cara 2: compact() — ringkas dan elegan
    return view('profil.tampilkan', compact('nama', 'email', 'kota', 'hobi'));
    // Setara dengan: view('profil.tampilkan', [
    //     'nama' => $nama, 'email' => $email, ...
    // ])
}
4

Metode 3 — Passing Data dengan with()

Method with() bisa di-chain setelah view() dan sangat berguna ketika kamu ingin menambahkan data satu per satu secara kondisional atau berurutan.

ProfilController.php — menggunakan with()
public function tampilkan($id)
{
    $nama  = 'Rina Kartika';
    $email = 'rina@example.com';

    // ✅ Cara 3: with() — chainable & fleksibel
    return view('profil.tampilkan')
        ->with('nama', $nama)
        ->with('email', $email)
        ->with('userId', $id);

    // Alternatif: with() menerima array juga
    // return view('profil.tampilkan')
    //     ->with(['nama' => $nama, 'email' => $email]);
}
5

Menerima Data di View — Blade Template

Apapun metode yang kamu gunakan, cara menerima data di View-nya sama. Variabel yang dikirim langsung bisa diakses di Blade tanpa perlu deklarasi apapun.

resources/views/profil/tampilkan.blade.php
@extends('layouts.app')

@section('content')

<div class="profil-card">
    <h2>{{ $nama }}</h2>
    <p>Email: {{ $email }}</p>
    <p>Kota: {{ $kota }}</p>

    <h3>Hobi:</h3>
    <ul>
        @foreach($hobi as $item)
            <li>{{ $item }}</li>
        @endforeach
    </ul>
</div>

@endsection
🔥
FAKTA MENARIK: compact() adalah Fungsi PHP Bawaan, Bukan Laravel!

Banyak pemula mengira compact() adalah fitur khusus Laravel. Padahal itu fungsi bawaan PHP yang sudah ada sejak PHP 4! Laravel hanya memanfaatkannya dengan elegan. Pasangannya, extract(), melakukan kebalikannya — mengurai array menjadi variabel. Laravel secara internal memanggil extract() untuk "menyuntikkan" variabel ke dalam scope View.

🌐 View::share() — Data Global Tanpa Routing Laravel Berulang

Bayangkan kamu punya data nama toko atau informasi pengguna yang sedang login — data yang dibutuhkan hampir di semua halaman. Apakah kamu akan mengirimnya secara manual di setiap method Controller? Tentu tidak. Itulah gunanya View::share().

View::share() ditempatkan di dalam Service Provider — biasanya AppServiceProvider.php — sehingga data tersedia di semua View secara otomatis tanpa harus melewati routing Laravel satu per satu.

6

Menggunakan View::share() di AppServiceProvider

app/Providers/AppServiceProvider.php
namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        // Data ini tersedia di SEMUA view secara otomatis
        View::share('namaToko', 'Toko Laravel Kita');
        View::share('versiApp', '1.0.0');

        // Atau share data dari database
        View::share('kategoriMenu', \App\Models\Kategori::all());
    }
}
INSIGHT: View Composer — Level Selanjutnya dari View::share()

Kalau View::share() mengirim data ke semua View, View Composer memungkinkan kamu mengirim data hanya ke View tertentu secara otomatis. Contoh: sidebar yang selalu butuh daftar kategori terbaru bisa pakai View Composer tanpa harus mengirim data itu dari setiap Controller. Ini topik lanjutan yang sangat berguna untuk aplikasi skala menengah ke atas!

⚠️ Kesalahan Umum Pemula saat Passing Data di Routing Laravel

Bahkan langkah yang "simpel" ini punya jebakan yang sering membuat pemula frustrasi berjam-jam. Berikut kesalahan paling umum yang wajib kamu hindari agar pengembangan lewat routing Laravel tetap lancar.

🔍 Analisis: Error Umum vs Solusinya
❌ ERROR: Undefined variable $nama
Penyebab: Lupa menyertakan variabel saat memanggil view(), atau typo pada nama key.
Solusi: Cek ulang array/compact yang dikirim, pastikan nama key sama persis dengan nama variabel di View.
⚠️ MASALAH: Menaruh logika query di dalam View
Penyebab: Mengakses Model atau memanggil fungsi database langsung di file Blade.
Solusi: Semua query harus di Controller. View hanya menerima hasil akhir yang sudah diolah.
⚡ JEBAKAN: Data tidak tersedia karena route parameter tidak dilewatkan
Penyebab: Route punya parameter {id} tapi tidak ikut dikirim ke View.
Solusi: Sertakan semua parameter route yang dibutuhkan View dalam array data yang dikirim.
7

Gunakan @isset di View untuk Keamanan Ekstra

Jika ada data yang mungkin tidak selalu dikirim, gunakan @isset atau operator null-safe daripada langsung mengakses variabel yang bisa jadi undefined.

<!-- ❌ Berbahaya jika $biodata tidak selalu ada -->
<p>{{ $biodata }}</p>

<!-- ✅ Aman dengan @isset -->
@isset($biodata)
    <p>{{ $biodata }}</p>
@endisset

<!-- ✅ Atau gunakan nilai default -->
<p>{{ $biodata ?? 'Belum ada biodata' }}</p>
⚠️
PERHATIAN: Jangan Kirim Data Sensitif ke View!

Hindari mengirim data seperti password, token rahasia, atau data pengguna lain ke View meskipun tidak ditampilkan. Data yang dikirim ke View bisa diakses melalui developer tools browser atau error log. Filter hanya data yang benar-benar perlu ditampilkan!

🎓

Kesimpulan: Data Mengalir dari Controller ke View

Dalam ekosistem routing Laravel, memahami cara passing data dengan benar adalah fondasi yang akan kamu gunakan di setiap proyek.

📦
Array Langsung
Eksplisit & mudah dibaca, ideal untuk data sedikit
compact()
Ringkas & populer, nama variabel otomatis jadi key
🔗
with()
Chainable & fleksibel, tambah data secara bertahap
🌐
View::share()
Global ke semua View, ditulis di Service Provider

Kamu sudah menyelesaikan Artikel 9 dari 50 seri belajar Laravel! Di artikel berikutnya, kita naik level ke Eloquent ORM — cara Laravel berbicara dengan database secara elegan. Persiapkan dirimu!

🏷️ Tag Topik:

#Laravel #PassingData #RoutingLaravel #Controller #BladeView #PHP #BelajarLaravel #Tutorial2025

No comments:

Post a Comment

saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux