kamarkoding / kamarkoding-repository
Repository generator for Laravel
Package info
github.com/kamarkoding/kamarkoding-repository
pkg:composer/kamarkoding/kamarkoding-repository
1.3.2
2025-11-19 02:03 UTC
README
Generator sederhana untuk membuat Repository Pattern di Laravel secara otomatis.
Package ini membantu menjaga arsitektur aplikasi tetap rapi, terstruktur, dan mengikuti prinsip SOLID.
Fitur Utama
- Membuat Repository Interface dan Repository Class hanya dengan satu perintah.
- Struktur folder otomatis dibuat:
app/Repository/Contractsapp/Repository/Eloquent
- Binding otomatis interface → implementasi (tanpa perlu menambahkan di
AppServiceProvider) - Menggunakan Laravel Package Auto-Discovery (tanpa daftar provider manual).
- Kode bersih, ringan, dan cocok untuk aplikasi kecil maupun besar.
Instalasi
1. Tambahkan repository (jika lokal)
Jika package disimpan secara lokal:
"repositories": [ { "type": "path", "url": "../kamarkoding-repository" } ]
- Install melalui Composer
composer require kamarkoding/kamarkoding-repository
Laravel otomatis mendaftarkan Service Provider melalui auto-discovery.
Jika auto-discovery dimatikan, daftar manual di
config/app.php:
'providers' => [ Kamarkoding\KamarkodingRepository\Providers\RepositoryServiceProvider::class, ];
Membuat Repository Baru
Gunakan perintah berikut:
php artisan make:repository User
Output :
Created: Class UserRepositoryInterface.php
Created: Class UserRepository.php
Repository created successfully.
app/
└── Repository/
├── Contracts/
│ └── UserRepositoryInterface.php
└── Eloquent/
└── UserRepository.php
Struktur Folder
Struktur lengkap setelah membuat repository:
app/
└── Repository/
├── Contracts/
│ └── <Name>RepositoryInterface.php
└── Eloquent/
└── <Name>Repository.php
File: Interface
<?php
namespace App\Repository\Contracts;
interface UserRepositoryInterface
{
//
}
File: Implementasi
<?php
namespace App\Repository\Eloquent;
use App\Repository\Contracts\UserRepositoryInterface;
class UserRepository implements UserRepositoryInterface
{
//
}
Binding Otomatis
Package ini otomatis menghubungkan:
UserRepositoryInterface::class → UserRepository::class
Tidak perlu lagi menambahkan:
$this->app->bind(UserRepositoryInterface::class, UserRepository::class);
Penggunaan dalam Controller Laravel
<?php
namespace App\Http\Controllers;
use App\Repository\Contracts\UserRepositoryInterface;
class UserController extends Controller
{
protected $Users;
public function __construct(UserRepositoryInterface $Users)
{
$this->Users = $Users;
}
public function index()
{
$data = $this->Users->getAll(); // contoh method
return view('Users.index', compact('data'));
}
}
Penggunaan di Livewire Component
<?php
use Livewire\Component;
use App\Repository\Contracts\UserRepositoryInterface;
protected UserRepositoryInterface $userRepository;
class UserIndex extends Component
{
public UserRepositoryInterface $Users;
/**
* Inject repository langsung dari container.
*/
public function mount(UserRepositoryInterface $userRepository)
{
$this->userRepository = $userRepository;
}
public function delete($id)
{
$this->Users->delete($id);
}
public function render()
{
return view('livewire.user.index');
}
}
Atau menggunakan resolver otomatis:
public function getRepository()
{
return app(UserRepositoryInterface::class);
}
Penjelasan Arsitektur
Repository Pattern membantu:
- Memisahkan business logic dari data layer
- Mengurangi duplikasi query
- Meningkatkan testability (mocking jadi mudah)
- Memperjelas struktur project Memudahkan perubahan dari Eloquent ke Query Builder atau API tanpa mengubah Controller