panel:install
Ini adalah command utama yang dijalankan pada fresh installation PandaBear.
Command ini:
- mempublish config dan frontend;
- membuat Panel pertama;
- meregistrasikan Panel tersebut;
- menjelaskan home redirect;
- memeriksa kebutuhan frontend application;
- menawarkan pembuatan account yang dapat sign in.
Gunakan satu kali segera setelah:
composer require chocoalano/panelKemudian:
php artisan panel:installSemua langkah yang dilakukan installer sebenarnya juga tersedia sebagai command terpisah seperti:
vendor:publish
make:panel
panel:user2
3
Installer ada karena urutan langkahnya penting. Instalasi yang berhenti satu langkah sebelum application benar-benar dapat digunakan pada praktiknya sama dengan instalasi yang gagal.
Signature
panel:install
{--panel=Admin : The name of the first panel to scaffold}
{--no-panel : Publish and configure without scaffolding a panel}
{--no-user : Skip the offer to create a signing-in account}
{--force : Overwrite files that already exist}2
3
4
5
| Option | Default | Efek |
|---|---|---|
--panel= | Admin | Nama yang diberikan ke make:panel. Dinormalisasi menjadi StudlyCase oleh generator. |
--no-panel | off | Publish dan konfigurasi tetap berjalan, tetapi Panel tidak dibuat. Langkah scaffold dan registration dilewati. |
--no-user | off | Tidak menawarkan pembuatan user sama sekali. |
--force | off | Diteruskan ke vendor:publish dan make:panel; existing file dapat ditimpa. |
php artisan panel:install
php artisan panel:install --panel=Support
php artisan panel:install --no-panel
php artisan panel:install --panel=Admin --no-user --no-interaction
php artisan panel:install --force2
3
4
5
Urutan yang Dijalankan
1. Publish
Installer menjalankan:
php artisan vendor:publish --tag=panda-panel-config
php artisan vendor:publish --tag=panda-panel-assets2
--force, jika diberikan, diteruskan ke keduanya.
Setelah asset publish, installer menulis asset manifest:
use PandaPanel\Support\Installer\AssetManifest;
AssetManifest::write(AssetManifest::read());2
3
File:
.panel-assets.jsonmencatat baseline setiap published frontend file. Baseline inilah yang kemudian memungkinkan panel:assets membedakan:
- stale package copy;
- custom edit application;
- conflict.
Commit file tersebut ke repository.
Migration Tidak Langsung Dipublish
Installer menawarkan:
Publish the migrations into database/migrations? (yes/no) [no]
❯ They already run from the package. Publish only to own them, and set load_migrations
to false in config/panda-panel.php if you do.2
3
Default jawaban:
noPackage migrations sudah berjalan dari package.
Publishing migration berarti application mengambil ownership migration tersebut. Setelah itu sebaiknya:
'load_migrations' => false,di config/panda-panel.php.
Jika package copy dan published copy dari migration yang sama sama-sama didaftarkan, schema yang sama berpotensi diproses dari dua lokasi.
Pada non-interactive run, migration tidak dipublish.
2. Scaffold Panel
Installer memanggil:
make:panelmenggunakan value dari --panel dan --force.
Langkah ini dilewati jika:
--no-panel3. Register Panel di Config
Setelah scaffold, installer mengedit:
config/panda-panel.phpmenggunakan:
PandaPanel\Support\Installer\PanelRegistrarAPI:
use PandaPanel\Support\Installer\PanelRegistrar;
/**
* @param class-string $provider
* @param string|null $path the config file, defaulting to config_path('panda-panel.php')
* @return self::*
*/
PanelRegistrar::register('App\Panels\Admin\AdminPanelProvider');2
3
4
5
6
7
8
Kemungkinan hasil:
| Constant | Value | Kondisi | Report |
|---|---|---|---|
PanelRegistrar::REGISTERED | registered | Entry berhasil ditulis atau commented placeholder diaktifkan | Registered … in config/panda-panel.php. |
PanelRegistrar::ALREADY_PRESENT | already-present | Provider sudah terdaftar | Panel sudah terdaftar |
PanelRegistrar::NO_CONFIG | no-config | Config file tidak ada | Dilaporkan sebagai outstanding work |
PanelRegistrar::UNRECOGNISED | unrecognised | Struktur array panels tidak seperti bentuk bawaan | File dibiarkan untouched dan outstanding work dilaporkan |
Registration adalah langkah yang membuat Panel benar-benar memiliki URL.
4. Melaporkan Home Redirect
Installer dapat mencetak:
Signed-in visitors to /dashboard now land in the panel. Set home_redirect.enabled to false
in config/panda-panel.php to keep your own.2
Ini merupakan informasi, bukan prompt.
PandaBear menjelaskan perubahan karena /dashboard adalah screen milik application yang sudah ada sebelumnya.
Pesan tidak dicetak jika:
home_redirect.enabled = falseatau path list kosong.
5. Memeriksa Frontend
Installer menjalankan enam read-only checks melalui:
PandaPanel\Support\Installer\FrontendRequirements| Check | Method | Arti Failure |
|---|---|---|
| Inertia | missingInertia(): list<string> | resources/views/app.blade.php atau HandleInertiaRequests.php tidak tersedia. Panel screen adalah Inertia response dan dapat 500. |
| Vite | hasVite(): bool | Tidak ada vite.config.ts/.js; Vue assets tidak memiliki build pipeline. |
| npm manifest | hasNpmManifest(): bool | package.json milik package tidak sampai ke Composer archive sehingga dependency list tidak dapat dibaca. |
| npm dependencies | missingNpmPackages(): list<string> | package.json application belum mendeklarasikan package frontend yang diimport published components. |
| Layout override | layoutOverrides() | Inertia entry menimpa page.default.layout secara unconditional. |
| Host modules | missingHostModules() | Route/action modules atau starter-kit components yang dibutuhkan published frontend belum tersedia. |
Layout Check
Ini salah satu check paling penting karena problem-nya terlihat seperti UI bug, bukan exception.
Salah:
page.default.layout = AppLayout;Benar:
page.default.layout ??= AppLayout;atau:
page.default.layout ||= AppLayout;Setiap PandaBear page menyatakan layout-nya sendiri.
Jika application entry mengganti layout tanpa syarat setelah page di-resolve, Panel screen dapat tampil dengan:
- application sidebar;
- application shell;
- bukan Panel navigation;
tetapi tetap HTTP 200 dan tanpa log error.
6. Menawarkan Pembuatan User
Prompt:
Create a user who can sign in? (yes/no) [no]Jika dijawab yes, installer menjalankan:
panel:userdengan --panel mengarah ke Panel yang baru dibuat, sehingga account langsung dilaporkan apakah boleh masuk ke Panel tersebut.
Step dilewati jika:
--no-useratau input non-interactive.
Report Akhir
Jika semua requirement selesai:
INFO Done. Nothing is left to do by hand.Jika masih ada manual work:
WARN 3 thing(s) this package cannot do for your application:
1. Install the npm dependencies the components import, then rebuild:
npm install @inertiajs/vue3@^3.0.0 \
@lucide/vue@^1.31.0 \
…
npm run build
2. resources/js/app.ts line 12 overwrites the layout every panel page declares:
…
3. The published components import these modules, which belong to your application
and are not there yet:
…2
3
4
5
6
7
8
9
10
11
12
13
14
15
Semua outstanding work dikumpulkan lalu dicetak sekali di akhir. Dengan cara ini warning tidak tenggelam di antara banyak success message.
Yang Tidak Dilakukan Installer
| Tidak dilakukan | Alasan |
|---|---|
npm install, npm run build | Installer hanya mencetak exact command. Menjalankan package manager dari Artisan merupakan side effect yang tidak diminta. |
php artisan wayfinder:generate | Wayfinder bergantung pada route application. Installer melaporkan module yang hilang. |
php artisan migrate | Tetap merupakan standard Laravel deployment step. |
| Register guest redirect | Sudah dilakukan service provider melalui register_guest_redirect. |
Edit resources/js/app.ts | Installer hanya mendeteksi pola layout override yang salah dan membiarkan developer memperbaikinya. |
Exit Code
Selalu:
0Outstanding work tidak dianggap command failure.
Misalnya npm dependency yang belum diinstall adalah pekerjaan lanjutan, bukan alasan shell menyatakan installer crash.
Jika Anda membuat automation berdasarkan installer, periksa output/outstanding report, bukan hanya exit status.
Menjalankan Ulang Installer
Tanpa --force, re-run aman:
- existing published file dilewati;
- Panel registration yang sudah ada menjadi no-op;
make:paneltidak menimpa provider;- frontend checks read-only.
Dengan --force, behavior berbeda:
vendor:publish --forcemenimpa semua published files termasuk custom edit application.
Setelah initial install, gunakan:
php artisan panel:assetsuntuk upgrade frontend karena command tersebut dapat membedakan stale file dan edited file.
Hal yang Perlu Diperhatikan
--no-interactionmengubah dua keputusan: migration tidak dipublish dan user tidak ditawarkan. Step lain tetap berjalan.--no-paneljuga melewati registration. Tidak ada provider yang dapat ditambahkan ke config.- Installer tidak menebak custom structure pada
panelsconfig. Jika array dirakit dari variable atau bentuknya berubah, file tidak disentuh dan line yang harus ditambahkan dilaporkan. - npm dependency list berasal langsung dari
package.jsonpackage. Tidak ada duplicate dependency manifest yang harus dipelihara. .panel-assets.jsontetap ditulis walaupun publish tidak menulis file baru. Baseline dibuat dari state actual di disk.