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.
Artikel Lainnya di Kategori Laravel
9 November 2025
Cara Instalasi Laravel Volt di Laravel 12: Panduan Lengkap
Panduan lengkap instalasi Laravel Volt di Laravel 12 via Breeze dan Livewire: setup, konfigurasi, dan contoh implementasi.
Baca Artikel
Laravel 9 November 2025
Membuat Controller di Laravel 11
Pada artikel ini kita akan membahas cara membuat controller di laravel 11 secara praktis, dari persiapan lingkungan hingga implementasi praktis dan best practice. Laravel sebagai framework PHP modern memudahkan pengelolaan arsitektur aplikasi dengan konsep controller, routing, dan dependency injection. Dalam konteks proyek nyata, memahami cara membangun controller yang bersih, terstruktur, dan maintainable adalah pondasi utama. […]
Baca Artikel9 November 2025
Tutorial Laravel 12 Job Batching: Implementasi, Progress, dan Error Handling
Bayangkan Anda perlu kirim email ke 5.000 pengguna sekaligus, atau proses 1.000 gambar setelah upload. Kalau dijalankan satu per satu lewat queue biasa, Anda tidak tahu kapan semuanya selesai, dan tidak bisa jalankan aksi “setelah semua beres”. Job Batching di Laravel menyelesaikan masalah ini. Artikel ini membahas cara kerjanya, implementasi lengkap dengan contoh kode, dan […]
Baca ArtikelIngin Membaca Artikel Lainnya?
Temukan lebih banyak insight dan tips tentang teknologi dan bisnis digital.
Lihat Semua Artikel