Kembali ke Artikel
10 November 2025
vandyahmad24
Diperbarui: 18 April 2026

Apa Itu Contract di Laravel 12? Penjelasan Simpel + Contoh Kode

Bayangkan Anda membangun fitur notifikasi. Hari ini kirim via email, bulan depan ditambah WhatsApp, tahun depan mungkin push notification. Kalau kode Anda langsung bergantung ke implementasi email spesifik, setiap perubahan akan memaksa Anda menyentuh banyak file sekaligus.

Di sinilah Contract di Laravel 12 berguna.

Apa Itu Contract di Laravel 12?

Contract di Laravel adalah sekumpulan interface yang mendefinisikan “kontrak perilaku” sebuah layanan. Mereka berada di namespace Illuminate\Contracts dan tidak berisi implementasi — hanya daftar method yang harus dipenuhi oleh siapapun yang mengimplementasikannya.

Singkatnya: Contract mendefinisikan apa yang bisa dilakukan, bukan bagaimana melakukannya.

Perbedaan Contract dan Interface Biasa

Secara teknis, Contract Laravel adalah interface PHP biasa. Yang membedakannya adalah tujuan dan skala: Contract Laravel menstandardisasi layanan inti framework (cache, queue, auth, storage, dll.) sehingga Anda bisa menukar implementasinya tanpa mengubah kode yang memakainya.

Contoh: Illuminate\Contracts\Cache\Store mendefinisikan method get, put, forget, dll. Baik driver Redis maupun Memcached sama-sama mengimplementasikan contract ini — kode Anda tidak perlu tahu mana yang aktif.

Membuat Contract Sendiri

Selain contract bawaan Laravel, Anda bisa membuat contract untuk layanan buatan sendiri. Contoh sederhana untuk layanan notifikasi:

// app/Contracts/NotificationServiceContract.php
namespace App\Contracts;

interface NotificationServiceContract
{
    public function send(string $recipient, string $message): bool;
}

Lalu buat implementasinya:

// app/Services/EmailNotificationService.php
namespace App\Services;

use App\Contracts\NotificationServiceContract;

class EmailNotificationService implements NotificationServiceContract
{
    public function send(string $recipient, string $message): bool
    {
        // logika kirim email
        return true;
    }
}

Binding Contract ke Service Container

Daftarkan binding di AppServiceProvider atau service provider khusus:

use App\Contracts\NotificationServiceContract;
use App\Services\EmailNotificationService;

public function register(): void
{
    $this->app->bind(
        NotificationServiceContract::class,
        EmailNotificationService::class
    );
}

Setelah itu, gunakan contract via dependency injection di controller atau class lain:

use App\Contracts\NotificationServiceContract;

class OrderController extends Controller
{
    public function __construct(
        private NotificationServiceContract $notifier
    ) {}

    public function store(Request $request)
    {
        // ... proses order
        $this->notifier->send($request->email, 'Pesanan diterima!');
    }
}

Besok ketika Anda ingin ganti ke WhatsApp, cukup buat WhatsAppNotificationService, ubah satu baris binding di service provider — tidak ada yang berubah di controller.

Kapan Sebaiknya Menggunakan Contract?

Contract paling berguna ketika:

  • Implementasi layanan bisa berubah di masa depan (storage, payment gateway, notifikasi)
  • Anda ingin membuat unit test yang tidak bergantung ke implementasi nyata (mock mudah dibuat dari interface)
  • Tim besar — contract menjadi “dokumen hidup” yang mendefinisikan API internal antar modul

Untuk fungsi sederhana yang tidak akan berubah, Contract justru menambah kompleksitas yang tidak perlu. Gunakan dengan pertimbangan, bukan sebagai aturan baku.

Contract vs Facade di Laravel

Laravel punya Facade yang memberikan akses statis ke layanan container. Contract dan Facade sering digunakan untuk tujuan serupa, tapi berbeda pendekatan. Facade lebih ringkas untuk kode cepat; Contract lebih eksplisit dan mudah di-mock saat testing. Untuk aplikasi skala besar dengan banyak unit test, Contract umumnya lebih direkomendasikan.

Kalau Anda sedang membangun aplikasi Laravel dan butuh konsultasi arsitektur atau tim pengembang, kami di Arrazy Inovasi siap membantu.

Lihat layanan pengembangan aplikasi kami →

Tag: #laravel #php #tutorial
BACA JUGA

Artikel Lainnya di Kategori Laravel

Laravel

9 November 2025

Tutorial PostgreSQL di Laravel: Setup, JSONB, dan Full-Text Search

Laravel secara default menggunakan MySQL. Tapi kalau proyek Anda butuh fitur seperti JSON columns yang lebih canggih, full-text search bawaan, atau JSONB, PostgreSQL adalah pilihan yang solid. Artikel ini membahas cara setup PostgreSQL di Laravel, termasuk konfigurasi, perbedaan dengan MySQL, dan fitur-fitur PostgreSQL yang bisa dimanfaatkan langsung dari Eloquent. Instalasi dan Konfigurasi Pastikan extension PHP […]

Baca Artikel
Laravel

10 November 2025

Contoh Penggunaan Concurrency di Laravel 12: Dashboard, API Paralel, dan Defer

Artikel sebelumnya membahas konsep Concurrency di Laravel 12. Artikel ini fokus pada implementasi: studi kasus nyata bagaimana Concurrency bisa mempercepat aplikasi secara signifikan. Studi Kasus 1: Dashboard dengan Banyak Data Source Dashboard admin yang butuh data dari beberapa tabel berbeda. Ini biasanya jadi bottleneck karena diquery satu per satu. Sebelum (sequential — sekitar 800ms): public […]

Baca Artikel
Laravel

10 November 2025

Contoh Implementasi Policy dan Gate di Laravel 12: Studi Kasus CMS Multi-Role

Artikel ini melanjutkan penjelasan konsep Policy dan Gate di Laravel 12 dengan studi kasus implementasi lengkap: sistem manajemen konten dengan beberapa level akses. Studi Kasus: Sistem CMS dengan Multi-Role Skenario: aplikasi CMS dengan role admin, editor, dan author. Aturannya: Admin bisa lakukan semua aksi di artikel mana saja Editor bisa buat, edit, dan publish artikel […]

Baca Artikel

Ingin Membaca Artikel Lainnya?

Temukan lebih banyak insight dan tips tentang teknologi dan bisnis digital.

Lihat Semua Artikel