krisnaxyoga/krisna-crud-gen
| Install | |
|---|---|
composer require krisnaxyoga/krisna-crud-gen |
|
| Latest Version: | 0.6.0 |
| PHP: | ^8.2 |
| License: | MIT |
| Last Updated: | Aug 5, 2026 |
| Links: | GitHub · Packagist |
Krisna CRUD Gen
Single Source Schema → REST API + Admin UI otomatis untuk Laravel. Definisikan 1 file schema PHP, dapatkan REST API lengkap (Sanctum), validasi, dan (opsional) Admin Panel Inertia — tanpa menulis controller, route, atau tabel manual.
Fitur
- 🎯 Single Source Schema — 1 class mendefinisikan fields, validasi, UI props, & API.
- ⚡ REST API otomatis —
index/show/store/update/destroy+ endpoint schema, per slug. - 🔒 Aman by design — search/sort hanya kolom yang dideklarasikan; validasi & mass-assignment dibatasi schema.
- 🧩 Type-safe & fluent — PHP 8 typed properties, enum, attribute, fluent chaining (autocomplete penuh).
- 🪶 Ringan — hanya bergantung pada komponen
illuminate/*. - 🚀 Safe-Eject — ubah schema menjadi Controller + FormRequest fisik kapan pun butuh custom logic ekstrem.
- 🎛️ Admin Panel opsional — default API-only. Aktifkan saat install dan pilih tampilannya:
blade(server-side, tanpa build) atauvue/react/svelte(Inertia). - 🌼 Admin Panel ber-DaisyUI — komponen lengkap untuk keempat tampilan, CSS-nya sudah dikompilasi & ikut dibundel, jadi tidak wajib memasang Tailwind sendiri.
- 🛠️ Generator —
php artisan krisnaxyoga:crud Productuntuk scaffold schema (+ model & migration) dalam satu perintah.
Instalasi
Via Packagist (jika sudah dipublish)
composer require krisnaxyoga/krisna-crud-gen
Via VCS (langsung dari GitHub, tanpa Packagist)
Tambahkan di composer.json aplikasi:
{
"repositories": [
{ "type": "vcs", "url": "https://github.com/krisnaxyoga/krisna-crud-gen" }
],
"require": {
"krisnaxyoga/krisna-crud-gen": "^0.1"
}
}
composer update krisnaxyoga/krisna-crud-gen
Instalasi cepat
php artisan crud:install
Interaktif, dua pertanyaan:
Pasang Admin Panel juga? (tanpa ini, output hanya REST API) [yes/no]
❯ Tampilan Admin Panel [blade]:
[0] blade
[1] vue
[2] react
[3] svelte
Jawab no → tetap seperti semula: hanya REST API, tanpa route admin, tanpa aset.
Non-interaktif:
php artisan crud:install --frontend=api # hanya REST API (paling ringan)
php artisan crud:install --frontend=blade # Admin Panel server-side (tanpa npm/build)
php artisan crud:install --frontend=vue # Admin Panel Inertia + Vue
php artisan crud:install --frontend=react # Admin Panel Inertia + React
php artisan crud:install --frontend=svelte # Admin Panel Inertia + Svelte
php artisan crud:install --frontend=blade --theme=dracula # sekaligus set tema DaisyUI
Perintah ini men-set CRUD_ENGINE_FRONTEND di .env, mem-publish aset yang sesuai (termasuk CSS DaisyUI untuk semua mode Admin Panel), dan menampilkan langkah manual yang tersisa per mode.
Prasyarat REST API (Sanctum)
php artisan install:api
Tambahkan trait Laravel\Sanctum\HasApiTokens ke model User.
Publish konfigurasi (opsional)
php artisan vendor:publish --tag=crud-engine-config
Cara membuat CRUD
Cara 1 — Generator (krisnaxyoga:crud) ⚡ direkomendasikan
Scaffold schema (opsional + model & migration) dalam satu perintah:
php artisan krisnaxyoga:crud Product --model --migration \
--fields="name:string, price:number, description:richtext, is_active:boolean"
Argumen & opsi:
| Bagian | Fungsi |
|---|---|
Product |
Nama resource (StudlyCase). Menghasilkan ProductResource & slug products. |
--fields="col:type,..." |
Definisi field. Tanpa ini → satu field teks name. |
--model |
Sekaligus buat model Eloquent App\Models\Product. |
--migration |
Buat model + migration. |
--force |
Timpa schema yang sudah ada. |
Menghasilkan app/CrudSchemas/ProductResource.php lengkap dengan field + import sesuai tipe. Kolom name otomatis searchable()->sortable().
Tipe --fields yang didukung: string, text, textarea, number, integer, decimal, email, password, boolean, select, date, datetime, file, image, richtext, belongsTo.
Langkah setelah generate:
# 1. Lengkapi kolom migration sesuai field, lalu:
php artisan migrate
# 2. Selesai — REST API /api/crud/products aktif.
# Bila frontend != api, Admin Panel /admin/products juga aktif.
Alias lama
crud:makemasih berfungsi.
Cara 2 — Manual
1. Buat model + migration seperti biasa (php artisan make:model Product -m).
2. Buat schema di app/CrudSchemas/ProductResource.php:
<?php
namespace App\CrudSchemas;
use App\Models\Product;
use Krisnaxyoga\CrudGen\Attributes\ApiResource;
use Krisnaxyoga\CrudGen\Fields\{TextField, NumberField, SelectField};
use Krisnaxyoga\CrudGen\Resource;
#[ApiResource(slug: 'products', perPage: 25)]
class ProductResource extends Resource
{
public function model(): string
{
return Product::class;
}
public function fields(): array
{
return [
TextField::make('name')->required()->searchable()->sortable(),
SelectField::make('status')->options(['draft' => 'Draft', 'published' => 'Published'])->required(),
NumberField::make('price')->required()->min(0),
];
}
}
3. Selesai. REST API langsung aktif (auto-discovery dari app/CrudSchemas):
| Method | Endpoint |
|---|---|
GET |
/api/crud/products/schema |
GET |
/api/crud/products — ?search= ?sort=-price ?per_page= ?page= |
POST |
/api/crud/products |
GET |
/api/crud/products/{id} |
PUT/PATCH |
/api/crud/products/{id} |
DELETE |
/api/crud/products/{id} |
Katalog Field
| Class | Tipe | Validasi dasar |
|---|---|---|
TextField |
text | string |
TextareaField |
textarea | string |
NumberField |
number | numeric |
EmailField |
email |
|
PasswordField |
password | string, min:8 |
BooleanField |
boolean | boolean |
SelectField |
select | string / array |
DateField |
date / datetime | date |
FileUploadField |
file | file / image |
RichTextField |
richtext | string (HTML) |
BelongsToField |
belongsTo | exists:{tabel},{kolom} |
Contoh fluent
TextField::make('title')->required()->max(200)->searchable()->sortable()->unique()->columnSpan(6);
SelectField::make('role')->options(['admin' => 'Admin', 'user' => 'User'])->multiple();
NumberField::make('price')->min(0)->step(0.01);
FileUploadField::make('image')->image()->disk('public')->directory('products')->maxKb(2048);
BelongsToField::make('category_id')->relation(Category::class, 'name');
RichTextField::make('body');
Safe-Eject
Ketika butuh custom logic ekstrem, "lulus"-kan resource dari engine menjadi file fisik mandiri:
php artisan crud:eject products # generate controller + request + routes
php artisan crud:eject products --force # timpa
php artisan crud:eject products --purge # + hapus schema
Menghasilkan:
app/Http/Controllers/Crud/ProductController.php— CRUD lengkap (search/sort/paginate inline)app/Http/Requests/Crud/ProductRequest.php— rules create/update dari schema (termasukRule::unique()->ignore($id))routes/crud/products.php
Lalu require __DIR__ . '/crud/products.php'; di routes/api.php dan hapus schema-nya.
Konfigurasi
config/crud-engine.php:
return [
// api | blade | vue | react | svelte (route admin nonaktif saat 'api')
'frontend' => env('CRUD_ENGINE_FRONTEND', 'api'),
'api' => ['prefix' => 'api/crud', 'middleware' => ['api', 'auth:sanctum']],
'admin' => [
'prefix' => 'admin',
'middleware' => ['web', 'auth'],
'theme' => env('CRUD_ENGINE_THEME', 'light'), // tema DaisyUI
'brand' => env('CRUD_ENGINE_BRAND', 'CRUD Engine'),
],
'schema_path' => app_path('CrudSchemas'),
'schema_namespace' => 'App\\CrudSchemas',
];
Admin Panel (opsional)
Package ini API-first. Admin Panel sepenuhnya opsional: default api, dan route admin hanya didaftarkan bila crud-engine.frontend bukan api. Tidak memilih Admin Panel = tidak ada route admin, tidak ada aset, tidak ada beban.
Bila dipilih, keempat tampilan memakai DaisyUI dengan komponen yang setara — bukan salah satu saja.
| Mode | Yang aktif | Build tool | Komponen dibundel |
|---|---|---|---|
api (default) |
Hanya REST API /api/crud |
— | — |
blade |
+ Admin Panel server-side | ❌ tanpa npm | Blade views |
vue |
+ Admin Panel Inertia | ✅ Vite | 12 komponen .vue |
react |
+ Admin Panel Inertia | ✅ Vite | 12 komponen .jsx |
svelte |
+ Admin Panel Inertia | ✅ Vite | 12 komponen .svelte |
Tiap mode Inertia mendapat: Layouts/AdminLayout, Pages/CrudEngine/{Dashboard,Index,Form}, dan Components/Fields/* (renderer + 7 field: input, textarea, select, toggle, date, file upload, rich text).
CSS: tidak perlu setup Tailwind
crud:install mem-publish public/vendor/crud-engine/admin.css — hasil kompilasi Tailwind v4 + DaisyUI v5 yang ikut terdistribusi bersama package. Panel langsung tampil benar, offline, tanpa npm install tailwindcss.
Sudah punya Tailwind + DaisyUI sendiri? Hapus baris <link> di resources/views/app.blade.php dan pastikan resources/js/** ikut dipindai konfigurasi Tailwind-mu.
Catatan: CSS bundel hanya memuat kelas yang dipakai komponen bawaan. Kalau kamu menambah kelas DaisyUI baru di komponen hasil publish, kelas itu perlu build Tailwind milikmu sendiri.
Tema
CRUD_ENGINE_THEME=dracula
CRUD_ENGINE_BRAND="Panel Toko"
Tema yang ikut dibundel: light (default), dark, corporate, business, emerald, night, nord, dracula. Dipasang sebagai <html data-theme="…">. Tema di luar daftar itu perlu build CSS sendiri (lihat Build ulang CSS).
Mode api
Tidak ada UI. Konsumsi kontrak GET /api/crud/{slug}/schema untuk membangun UI apa pun sendiri.
Mode blade
php artisan crud:install --frontend=blade
Dirender penuh di server — tanpa npm/build sama sekali. Buka /admin. Kustomisasi: php artisan vendor:publish --tag=crud-engine-views.
Mode vue / react / svelte
php artisan crud:install --frontend=react
Mem-publish komponen ke resources/js/**, membuat entry Vite yang sesuai (app.js untuk Vue/Svelte, app.jsx untuk React) dan resources/views/app.blade.php. Lengkapi langkah yang ditampilkan command:
| Mode | Dependensi npm |
|---|---|
vue |
vue @inertiajs/vue3 @vitejs/plugin-vue |
react |
react react-dom @inertiajs/react @vitejs/plugin-react |
svelte |
svelte @inertiajs/svelte @sveltejs/vite-plugin-svelte |
Lalu daftarkan plugin di vite.config.js, jalankan php artisan inertia:middleware, dan npm run build.
Komponen Svelte memakai sintaks Svelte 5 (runes). Untuk Svelte 4, sesuaikan
$props()/$derived— tiap komponen punya catatannya.
Mem-publish ulang komponen tanpa crud:install:
php artisan vendor:publish --tag=crud-engine-vue # atau -react / -svelte
php artisan vendor:publish --tag=crud-engine-assets # CSS saja
Route admin:
/admin(dashboard),/admin/{slug}(tabel),/admin/{slug}/create,/admin/{slug}/{id}/edit. Halaman login spesifik aplikasi — sediakan sendiri.
Build ulang CSS (kontributor)
Hanya perlu bila mengubah template package atau menambah tema:
cd build
npm install
npm run build # -> resources/dist/admin.css
npm run verify # cek semua komponen Vue/React/Svelte bisa dikompilasi
Requirements
- PHP 8.2+
- Laravel 10 / 11 / 12 / 13
laravel/sanctum(untuk REST API terproteksi Bearer)
Testing
composer install
composer test # 51 tests
cd build && npm install
npm run verify # 36 komponen Vue/React/Svelte dikompilasi
CI (GitHub Actions) menjalankan suite PHP pada 8.2, 8.3, dan 8.4, plus job terpisah yang mengompilasi seluruh komponen Admin Panel dan memastikan resources/dist/admin.css tidak basi terhadap template.
Lisensi
MIT © krisnaxyoga
Related Packages
Laravel Auto CRUD with Inertia React support - helps you streamline development...
Config-driven CRUD scaffolding for Laravel + Inertia.js (React/TypeScript) with...