Requirement
Dokumen ini menjelaskan apa saja yang harus tersedia pada aplikasi sebelum composer require chocoalano/panel dapat menginstal package, melakukan boot, dan merender sebuah Panel. Baca bagian ini terlebih dahulu jika Anda menambahkan PandaBear ke aplikasi yang sudah ada. Aplikasi baru yang dibuat dari Laravel Vue starter kit biasanya sudah memenuhi hampir seluruh requirement ini.
Periksa Apa yang Sudah Tersedia
php -v # 8.2 or newer
php -m | grep -E 'json|zip'
composer show laravel/framework | head -2
node -v # 20.19 or newer2
3
4
Tidak ada requirement di sini yang hanya berupa tebakan terhadap project Anda. Setelah package terpasang, installer akan memeriksa kondisi yang sama secara langsung dari file aplikasi dan menyebutkan apa yang masih kurang.
php artisan panel:installPHP dan Composer
Berikut adalah constraint yang benar-benar dideklarasikan pada composer.json package ini. Composer menegakkan semuanya, sehingga aplikasi yang tidak memenuhi requirement akan gagal pada saat composer require, bukan baru gagal saat runtime.
| Requirement | Constraint | Mengapa Dibutuhkan |
|---|---|---|
php | ^8.2 | PHP 8.2 didukung melalui Laravel 12, yaitu Laravel terbaru yang masih dapat berjalan di PHP 8.2. |
ext-json | * | Metadata dikirim ke Vue sebagai JSON, dan .panel-assets.json dibaca serta ditulis sebagai JSON. |
ext-zip | * | Digunakan untuk import/export XLSX. File .xlsx pada dasarnya merupakan zip archive — lihat PandaPanel\Support\Spreadsheet\Xlsx. |
composer-runtime-api | ^2.2 | Menyediakan Composer\InstalledVersions, yang membaca versi plugin yang benar-benar terinstal, bukan mempercayai string manual. |
composer/semver | ^3.0 | Mengevaluasi constraint requiresPanel milik plugin terhadap versi framework ini. |
laravel/framework | ^12.0|^13.0 | Lihat Compatibility untuk alasan Laravel 11 tidak didukung dan memang tidak dapat didukung. |
inertiajs/inertia-laravel | ^3.0 | Seluruh screen Panel adalah Inertia response. Versi 2 tidak didukung. |
laravel/fortify | ^1.37.2 | Digunakan untuk login, registration, password reset, two-factor, dan passkeys. Panel merender screen; Fortify menangani POST. |
symfony/finder | ^7.0|^8.0 | Discovery memindai directory Panel untuk menemukan Resource, Page, dan Widget. |
ext-zip merupakan hard requirement, bukan sekadar suggestion, karena dideklarasikan pada bagian require, bukan suggest. Bahkan aplikasi yang tidak pernah menggunakan spreadsheet tetap harus memiliki extension tersebut agar Composer dapat menginstal package.
Database
Tidak ada implementasi package yang bergantung pada engine database tertentu. Query menggunakan Eloquent biasa dan test suite berjalan di SQLite. Yang dibutuhkan package adalah schema-nya sendiri, yang dikirim sebagai empat migration dan secara default dijalankan langsung dari package:
| Migration | Yang Dibuat | Guard |
|---|---|---|
create_notifications_table | Table notifications bawaan Laravel yang dibaca Notification Centre pada setiap request Panel. | Dilewati jika table sudah ada. down() hanya menghapus table jika migration dapat memastikan package inilah yang membuatnya. |
add_email_two_factor_to_users_table | Column two_factor_email_confirmed_at pada users. | Dilewati jika table users tidak ada atau column sudah tersedia. Ditempatkan setelah two_factor_confirmed_at milik Fortify jika column tersebut ada; jika tidak, ditambahkan di akhir. |
create_panel_integrations_table | panel_integrations. | Dilewati jika table sudah ada. |
add_history_and_signing_to_panel_integrations | panel_integration_deliveries dan column secret. | Setiap bagian dilewati secara independen jika sudah diterapkan. |
Migration dijalankan langsung dari package karena Panel tidak dapat merender tanpa migration pertama. Jika instalasi mengharuskan developer mengingat langkah publish terlebih dahulu, URL Panel pertama dapat langsung menghasilkan HTTP 500. Jika Anda ingin memiliki migration tersebut di aplikasi sendiri:
php artisan vendor:publish --tag=panda-panel-migrations// config/panda-panel.php
'load_migrations' => false,2
Membiarkan load_migrations tetap true dan mempublish migration akan menghasilkan dua salinan migration yang sama, sehingga schema berpotensi diterapkan dua kali. Publish hanya jika Anda ingin mengambil ownership, lalu matikan flag tersebut.
User Model
Panel membutuhkan beberapa capability dari User Model. Laravel Vue starter kit sudah menyediakan dua capability pertama.
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Fortify\TwoFactorAuthenticatable;
use PandaPanel\Contracts\PanelUser;
use PandaPanel\Core\Panel;
class User extends Authenticatable implements PanelUser
{
use Notifiable;
use TwoFactorAuthenticatable;
public function canAccessPanel(Panel $panel): bool
{
return $this->hasVerifiedEmail();
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| Kebutuhan | Wajib? | Digunakan oleh |
|---|---|---|
Illuminate\Notifications\Notifiable | Ya, untuk Notification Centre | PandaPanel\Contracts\PanelNotifiable mendeklarasikan tiga method yang sama agar static analysis dapat melihat contract-nya. Model tidak wajib mengimplementasikan interface tersebut — trait Notifiable sudah memenuhi kebutuhan controller. |
Laravel\Fortify\TwoFactorAuthenticatable | Ya, untuk Security Settings | Digunakan oleh Page settings/security milik Panel. |
PandaPanel\Contracts\PanelUser | Opsional | Satu method: canAccessPanel(Panel $panel): bool. Menentukan rule milik account — misalnya suspended, unverified, atau tidak memiliki tenant — dan diperiksa pada setiap request bersama canAccess() milik Panel. Keduanya harus sama-sama mengizinkan; satu rule tidak dapat melonggarkan rule lainnya. |
PandaPanel\Contracts\HasPanelTenants | Hanya untuk Panel tenant-scoped | Menentukan tenant apa saja yang dapat dimasuki account dan apakah account boleh memasuki tenant tertentu. Lihat Tenancy. |
Jika User Model tidak mengimplementasikan PanelUser maupun contract lain, account tidak otomatis ditolak oleh layer tersebut. Dalam kasus itu hanya predicate canAccess() milik Panel yang menjadi gate akses.
Frontend
Screen Panel merupakan Vue 3 SFC yang dipublish ke resources/js aplikasi dan dibuild oleh Vite milik aplikasi. Ada tiga hal yang harus tersedia, dan package tidak dapat menyiapkannya sepenuhnya atas nama aplikasi:
| Kebutuhan | Diperiksa oleh | |
|---|---|---|
| 1 | Root view Inertia pada resources/views/app.blade.php dan app/Http/Middleware/HandleInertiaRequests.php. | FrontendRequirements::missingInertia() |
| 2 | vite.config.ts atau vite.config.js. | FrontendRequirements::hasVite() |
| 3 | npm dependency yang diimpor component, serta module @/ yang memang dimiliki aplikasi. | FrontendRequirements::missingNpmPackages(), FrontendRequirements::missingHostModules() |
Daftar npm dependency dibaca langsung dari package.json package ini, bukan diduplikasi pada source lain. Dengan demikian panel:install dan frontend build tidak dapat memiliki daftar requirement yang berbeda:
| Package | Range |
|---|---|
@inertiajs/vue3 | ^3.0.0 |
@internationalized/date | ^3.12.0 |
@laravel/echo-vue | ^2.4.0 |
@laravel/passkeys | ^0.4.0 |
@lucide/vue | ^1.31.0 |
@tailwindcss/vite | ^4.1.0 |
@tanstack/vue-table | ^9.0.0 |
@vueuse/core | ^14.0.0 |
class-variance-authority | ^0.7.0 |
clsx | ^2.1.0 |
reka-ui | ^2.0.0 |
tailwind-merge | ^3.0.0 |
tailwindcss | ^4.1.0 |
tw-animate-css | ^1.2.0 |
vue | ^3.5.0 |
vue-input-otp | ^0.4.0 |
vue-sonner | ^2.0.0 |
Node minimum adalah 20.19, sesuai batas minimum Vite 7 dan deklarasi engines.node. Baris npm install yang tepat untuk project Anda — hanya package yang benar-benar belum tersedia — akan dicetak oleh panel:install.
Daftar lengkap module @/… yang menjadi milik aplikasi, bukan package, tersedia di Frontend requirements.
Bagian Aplikasi yang Diambil Alih Panel
Instalasi package mengubah behavior pada dua jenis alamat, tetapi alamat tersebut tetap dapat diakses:
| Alamat | Yang Terjadi | Cara Mempertahankan Behavior Anda |
|---|---|---|
/dashboard | User yang sudah sign-in diarahkan ke Panel pertama yang dapat dimasuki. Route, nama route, dan pages/Dashboard.vue tidak diubah — request ditangani lebih awal oleh middleware web. | Set home_redirect.enabled => false pada config/panda-panel.php |
| Guest membuka URL Panel | Guest diarahkan ke login milik Panel tersebut jika tersedia, dan ke route('login') jika tidak — sama dengan default Laravel untuk fallback-nya. | Set register_guest_redirect => false, lalu panggil PandaPanel\Support\PanelLoginRedirect::for() dari rule redirect Anda sendiri |
Tidak ada bagian lain dari aplikasi yang dibaca, diedit, atau ditimpa.
Catatan
- PHP 8.2 dengan Laravel 13 tidak tersedia. Laravel 13 membutuhkan PHP 8.3. Pengguna PHP 8.2 menggunakan Laravel 12, dan CI benar-benar menjalankan kombinasi tersebut.
ext-ziptetap wajib walaupun Anda tidak menggunakan spreadsheet. Extension ini ada padarequire, sehingga Composer menolak menginstal package jika extension tidak tersedia.- Table
notificationsbukan opsional. Notification Centre meng-query table tersebut pada setiap request Panel. Jika Anda mematikanload_migrations, publish migration lalu jalankan migration tersebut. - Fortify merupakan dependency, bukan sekadar integrasi opsional.
composer require chocoalano/panelakan menginstalnya. Yang tetap harus disediakan aplikasi adalah sisi application-specific Fortify — sepertiFortify::createUsersUsing()dan view callback untuk route di luar Panel.
Lihat Juga
- Compatibility matrix — kombinasi yang diuji CI dan yang sengaja tidak didukung
- Installation — proses instalasi langkah demi langkah
- Frontend requirements — npm package dan host seam secara lengkap
- Laravel Vue starter kit setup — jalur tercepat untuk instalasi pada aplikasi baru
- Common install problems — gejala umum dan penyebabnya
- Configuration reference — seluruh key pada
config/panda-panel.php - Authentication and users — detail User Model