kominfogusit / laravel-helper
Reusable helper utilities for Laravel 12 and 13 applications.
Requires
- php: ^8.2
- afatmustafa/blade-hugeicons: ^2.0
- blade-ui-kit/blade-icons: ^1.9
- illuminate/support: ^12.0|^13.0
- illuminate/view: ^12.0|^13.0
- mallardduck/blade-lucide-icons: ^1.26
- php-flasher/flasher-laravel: ^2.5
- php-flasher/flasher-noty-laravel: ^2.5
- php-flasher/flasher-sweetalert-laravel: ^2.5
Requires (Dev)
- orchestra/testbench: ^10.0|^11.0
- phpunit/phpunit: ^11.5
README
Paket Laravel 12/13 yang menyediakan komponen Blade untuk membangun tampilan admin: komponen UI, aset layout yang dapat dipublish, helper tabel, remote select, interaksi modal, dan utilitas PHP.
Apa yang Disediakan
- Komponen Blade bernamespace seperti
x-laravel-helper::button,x-laravel-helper::form.input,x-laravel-helper::modal,x-laravel-helper::table-filter, danx-laravel-helper::table-index. - Aset layout, CSS, dan JavaScript yang dapat dipublish untuk tema UI default.
- Utilitas untuk query index, pesan exception, opsi enum, dan preservasi state index.
Persyaratan
- PHP
^8.2 - Laravel
^12.0atau^13.0 - Vite untuk aplikasi yang menggunakan layout atau mengimpor CSS yang dipublish dari
resources/css/app.css - Alpine.js untuk komponen interaktif seperti modal, table filter, table index, remote select, dan cascade select
window.axiosuntuk fitur remote select dan AJAX dependent select
Package menginstal dependensi runtime berikut melalui Composer:
blade-ui-kit/blade-iconsmallardduck/blade-lucide-iconsafatmustafa/blade-hugeiconsphp-flasher/flasher-laravelphp-flasher/flasher-noty-laravelphp-flasher/flasher-sweetalert-laravel
Instalasi
Install package melalui Composer:
composer require kominfogusit/laravel-helper
Laravel auto-discovers service provider secara otomatis.
Publish file konfigurasi:
php artisan vendor:publish --tag=laravel-helper-config
Publish layout, CSS, dan JavaScript default:
php artisan vendor:publish --tag=laravel-helper-core-ui
Install aset Flasher:
php artisan flasher:install
Import CSS yang dipublish di resources/css/app.css:
@import './vendor/laravel-helper/default.css';
default.css mengimpor stylesheet package untuk layout, badge, button, card, link, modal, spinner, table-filter, table-index, dan komponen form.
Install Alpine.js dan Axios:
npm install alpinejs axios
Aktifkan Alpine dan daftarkan Axios di resources/js/app.js:
import Alpine from 'alpinejs';
import axios from 'axios';
window.Alpine = Alpine;
window.axios = axios;
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
Alpine.start();
Catatan:
window.axioswajib tersedia agar fitur AJAX padax-laravel-helper::form.select(cascade select) berfungsi.
Tambahkan @stack('head-scripts') di <head> layout aplikasimu, tepat sebelum @vite():
@stack('head-scripts')
@vite(['resources/css/app.css', 'resources/js/app.js'])
Komponen dari package ini akan secara otomatis mendaftarkan script yang dibutuhkan ke stack ini (via @pushOnce) hanya saat komponen tersebut digunakan di halaman.
Layout default yang dipublish sudah menyertakan @stack('head-scripts') ini secara otomatis.
Penggunaan Cepat
Gunakan layout yang dipublish sebagai shell aplikasi admin:
@extends('layout.default')
@section('page_heading', 'Dashboard')
@section('page_subheading', 'Ringkasan aplikasi dan aktivitas terbaru.')
@section('content')
<x-laravel-helper::card>
<p>Konten halaman ditulis di sini.</p>
</x-laravel-helper::card>
@endsection
Setelah publish, kustomisasi menu navigasi di resources/views/layout/sidebar.blade.php dan user menu di resources/views/layout/topbar.blade.php. Lihat Panduan Layout untuk detail lengkap.
Gunakan form input:
<x-laravel-helper::form.input
name="name"
label="Nama"
placeholder="Masukkan nama"
required
/>
Gunakan action button:
<x-laravel-helper::button type="submit" variant="primary">
Simpan
</x-laravel-helper::button>
Gunakan table index:
<x-laravel-helper::table-index
:data-list="$users"
:data-columns="[
['key' => 'name', 'label' => 'Nama', 'sortable' => true, 'sortKey' => 'name'],
['key' => 'email', 'label' => 'Email'],
]"
/>
Komponen
Form
| Komponen | Kegunaan | Dokumentasi |
|---|---|---|
x-laravel-helper::form.input | Field input teks dengan label, hint, error, atribut Livewire, dan fallback aksesibilitas. | Form Input |
x-laravel-helper::form.checkbox | Field checkbox dengan label, deskripsi, checked state, error, dan dukungan old(). | Form Checkbox |
x-laravel-helper::form.textarea | Field textarea dengan label, hint, error, rows, dan atribut Livewire. | Form Textarea |
x-laravel-helper::form.select | Field select dengan label, hint, error, placeholder, dan mode searchable. | Form Select |
UI
| Komponen | Kegunaan | Dokumentasi |
|---|---|---|
x-laravel-helper::button | Tombol atau link aksi dengan variant, loading state, ikon, dan mode icon-only. | Button |
x-laravel-helper::link | Anchor dengan variant, perilaku underline, ikon, dan disabled state. | Link |
x-laravel-helper::badge | Label kecil dengan variant, tone, ukuran, ikon, dan indikator dot. | Badge |
x-laravel-helper::card | Kontainer konten dengan header opsional, footer, variant status, dan wrapper tag. | Card |
x-laravel-helper::spinner | Indikator loading untuk form, tombol, dan area loading inline. | Spinner |
Dialog & Modal
| Komponen | Kegunaan | Dokumentasi |
|---|---|---|
x-laravel-helper::modal | Dialog berbasis Alpine dengan event open/close/toggle dan slots. | Modal |
Table
| Komponen | Kegunaan | Dokumentasi |
|---|---|---|
x-laravel-helper::table-filter | Toolbar filter query-string dengan pencarian cepat, modal filter, dan dependent select. | Table Filter |
x-laravel-helper::table-index | Tabel data dengan header sortable, formatting, row action, rows-per-page, dan paginasi. | Table Index |
Utilitas
Package menyediakan utilitas consumer-facing berikut:
Indrahulu\LaravelHelper\Services\IndexQueryServiceIndrahulu\LaravelHelper\Services\ExceptionServiceIndrahulu\LaravelHelper\Concerns\HasEnumOptionsIndrahulu\LaravelHelper\Concerns\PreservesIndexState
Lihat Utilitas untuk contoh penggunaan lengkap.
Dokumentasi
Development
composer install
composer test
Rilis package mengikuti Git tag, dimulai dari v0.1.0 untuk rilis praproduksi pertama.