uttam-official/laravel-panel-generator
Composer 安装命令:
composer require uttam-official/laravel-panel-generator
包简介
Generate Laravel panel structures such as admin, vendor, seller, customer, and staff panels.
README 文档
README
Composer package:
uttam-official/laravel-panel-generator
Main command:
php artisan panel:generate admin php artisan panel:generate vendor php artisan panel:generate --name=vendor
This package generates Laravel panels such as admin, vendor, seller, staff, or customer from reusable template files.
What it generates
For:
php artisan panel:generate admin --register-route --update-vite
it creates:
resources/views/admin/
resources/js/admin/
resources/css/admin/
routes/admin.php
app/Http/Controllers/Admin/
app/Http/Requests/Admin/
app/Http/Middleware/Admin/
app/Trait/
For:
php artisan panel:generate vendor --register-route --update-vite
it creates:
resources/views/vendor/
resources/js/vendor/
resources/css/vendor/
routes/vendor.php
app/Http/Controllers/Vendor/
app/Http/Requests/Vendor/
app/Http/Middleware/Vendor/
app/Trait/
app/Trait is common for the whole Laravel application. It is not generated inside Admin, Vendor, or any other panel folder.
Local installation inside a Laravel project
Paste this package folder here:
your-laravel-project/packages/UttamOfficial/LaravelPanelGenerator
The package composer file should be here:
your-laravel-project/packages/UttamOfficial/LaravelPanelGenerator/composer.json
Then run these commands from your Laravel project root:
composer config repositories.laravel-panel-generator path packages/UttamOfficial/LaravelPanelGenerator composer require uttam-official/laravel-panel-generator:@dev php artisan optimize:clear
After editing package files during local development, run:
composer dump-autoload php artisan optimize:clear
If Composer copied instead of symlinked the package, run:
composer update uttam-official/laravel-panel-generator -W php artisan optimize:clear
Check the command:
php artisan list panel
Generate panels
Generate admin:
php artisan panel:generate admin --register-route --update-vite
Generate vendor:
php artisan panel:generate vendor --register-route --update-vite
Generate with auth middleware:
php artisan panel:generate admin --middleware=web,auth --register-route --update-vite
Overwrite existing generated files:
php artisan panel:generate admin --force --register-route --update-vite
After package.json changes, run:
npm install npm run dev
or:
npm run build
Where to paste your panel template files
Inside the package, use this folder:
packages/UttamOfficial/LaravelPanelGenerator/resources/panels/
Default template for all panels
Paste common panel template files here:
resources/panels/default/
views/
js/
css/
controllers/
requests/
middleware/
routes/
package.json
If you run panel:generate admin and no resources/panels/admin folder exists, the command uses resources/panels/default.
Panel-specific template
For admin-specific files, paste here:
resources/panels/admin/
views/
js/
css/
controllers/
requests/
middleware/
routes/
package.json
For vendor-specific files, paste here:
resources/panels/vendor/
views/
js/
css/
controllers/
requests/
middleware/
routes/
package.json
The command checks the panel-specific folder first. If it does not exist, it uses the default template.
Common system files
Files that should be common for the full Laravel app should go here:
resources/common/
For traits, paste here:
resources/common/trait/
Example:
resources/common/trait/Validation/FailedValidationTrait.php
resources/common/trait/Model/UuidTrait.php
They are copied to:
app/Trait/Validation/FailedValidationTrait.php
app/Trait/Model/UuidTrait.php
They are not copied to:
app/Trait/Admin/
app/Trait/Vendor/
The default trait namespace is:
App\Trait
If you prefer Laravel-style plural App\Traits, change config/panel-generator.php:
'paths' => [ 'traits' => app_path('Traits'), ], 'namespaces' => [ 'traits' => 'App\\Traits', ],
Where files go after generation
For admin:
resources/panels/admin/views/* -> resources/views/admin/*
resources/panels/admin/js/* -> resources/js/admin/*
resources/panels/admin/css/* -> resources/css/admin/*
resources/panels/admin/controllers/* -> app/Http/Controllers/Admin/*
resources/panels/admin/requests/* -> app/Http/Requests/Admin/*
resources/panels/admin/middleware/* -> app/Http/Middleware/Admin/*
resources/panels/admin/routes/* -> routes/admin.php
resources/common/trait/* -> app/Trait/*
For vendor:
resources/panels/vendor/views/* -> resources/views/vendor/*
resources/panels/vendor/js/* -> resources/js/vendor/*
resources/panels/vendor/css/* -> resources/css/vendor/*
resources/panels/vendor/controllers/* -> app/Http/Controllers/Vendor/*
resources/panels/vendor/requests/* -> app/Http/Requests/Vendor/*
resources/panels/vendor/middleware/* -> app/Http/Middleware/Vendor/*
resources/panels/vendor/routes/* -> routes/vendor.php
resources/common/trait/* -> app/Trait/*
If using the default template:
resources/panels/default/views/* -> resources/views/{panel}/*
resources/panels/default/js/* -> resources/js/{panel}/*
resources/panels/default/css/* -> resources/css/{panel}/*
resources/panels/default/controllers/* -> app/Http/Controllers/{Panel}/*
resources/panels/default/requests/* -> app/Http/Requests/{Panel}/*
resources/panels/default/middleware/* -> app/Http/Middleware/{Panel}/*
resources/panels/default/routes/* -> routes/{panel}.php
resources/common/trait/* -> app/Trait/*
Important template tokens
Use tokens in view/controller/request/route/middleware files so the same files can generate admin, vendor, seller, etc.
Blade views
Use:
@extends('___PANEL_VIEW_NAMESPACE___.layouts.app') @include('___PANEL_VIEW_NAMESPACE___.layouts.partials.sidebar') @vite(['___PANEL_CSS_PATH___/app.css', '___PANEL_JS_PATH___/app.js']) {{ route('___PANEL_ROUTE_NAME___dashboard') }} {{ route('___PANEL_ROUTE_NAME___auth.login') }}
For admin, these become:
@extends('admin.layouts.app') @include('admin.layouts.partials.sidebar') @vite(['resources/css/admin/app.css', 'resources/js/admin/app.js']) {{ route('admin.dashboard') }} {{ route('admin.auth.login') }}
Controllers
Use:
namespace ___PANEL_CONTROLLER_NAMESPACE___; use ___PANEL_REQUEST_NAMESPACE___\Auth\LoginRequest; return view('___PANEL_VIEW_NAMESPACE___.dashboard'); return redirect(route('___PANEL_ROUTE_NAME___auth.login'));
For admin, this becomes:
namespace App\Http\Controllers\Admin; use App\Http\Requests\Admin\Auth\LoginRequest; return view('admin.dashboard'); return redirect(route('admin.auth.login'));
Requests
Paste request templates here:
resources/panels/default/requests/Auth/LoginRequest.php
Use:
namespace ___PANEL_REQUEST_NAMESPACE___\Auth; use ___COMMON_TRAIT_NAMESPACE___\Validation\FailedValidationTrait;
For admin, this becomes:
namespace App\Http\Requests\Admin\Auth; use App\Trait\Validation\FailedValidationTrait;
Middleware
Paste middleware templates here:
resources/panels/default/middleware/___PANEL_CLASS___Middleware.php
Use:
namespace ___PANEL_MIDDLEWARE_NAMESPACE___; class ___PANEL_MIDDLEWARE_CLASS___ { // ... }
For admin, this generates:
app/Http/Middleware/Admin/AdminMiddleware.php
For vendor, this generates:
app/Http/Middleware/Vendor/VendorMiddleware.php
Routes
Paste route templates here:
resources/panels/default/routes/___PANEL_SLUG___.php
Use:
use ___PANEL_CONTROLLER_NAMESPACE___\AuthController; use ___PANEL_CONTROLLER_NAMESPACE___\DashboardController; use Illuminate\Support\Facades\Route; Route::middleware([___PANEL_ROUTE_MIDDLEWARE_ARRAY___]) ->prefix('___PANEL_ROUTE_PREFIX___') ->as('___PANEL_ROUTE_NAME___') ->group(function () { Route::controller(AuthController::class)->as('auth.')->group(function () { Route::get('login', 'login')->name('login'); }); Route::controller(DashboardController::class)->group(function () { Route::get('/', 'index')->name('dashboard'); }); });
For admin, this becomes routes/admin.php with prefix admin and route names like admin.dashboard.
package.json dependency merge
Paste frontend npm packages into the template package file:
resources/panels/default/package.json
resources/panels/admin/package.json
resources/panels/vendor/package.json
Example:
{
"dependencies": {
"@popperjs/core": "^2.11.8",
"bootstrap": "^5.3.3",
"jquery": "^3.7.1"
},
"devDependencies": {
"sass": "^1.77.0"
},
"scripts": {}
}
When you run:
php artisan panel:generate admin
the command checks the Laravel project's root package.json and adds only missing packages. If a package already exists in dependencies, devDependencies, peerDependencies, or optionalDependencies, it is skipped.
After generation, run:
npm install
Vite entries
The default layout uses Vite:
@vite(['___PANEL_CSS_PATH___/app.css', '___PANEL_JS_PATH___/app.js'])
For admin, this becomes:
@vite(['resources/css/admin/app.css', 'resources/js/admin/app.js'])
For vendor, this becomes:
@vite(['resources/css/vendor/app.css', 'resources/js/vendor/app.js'])
Use this option to try adding entries to vite.config.js automatically:
php artisan panel:generate admin --update-vite
If your Vite config is custom, add entries manually:
laravel({ input: [ 'resources/css/app.css', 'resources/js/app.js', 'resources/css/admin/app.css', 'resources/js/admin/app.js', ], refresh: true, })
Then run:
npm run dev
or:
npm run build
Publish editable templates into the Laravel app
Instead of editing the package directly, you can publish templates:
php artisan vendor:publish --tag=panel-generator-panels php artisan vendor:publish --tag=panel-generator-common
Then paste custom files here:
resources/vendor/panel-generator/panels/default/
resources/vendor/panel-generator/panels/admin/
resources/vendor/panel-generator/panels/vendor/
resources/vendor/panel-generator/common/trait/
The command checks the published template path first. If a matching panel template exists there, it uses that. Otherwise, it uses the package template.
Options
php artisan panel:generate admin php artisan panel:generate admin --force php artisan panel:generate admin --register-route php artisan panel:generate admin --middleware=web,auth php artisan panel:generate admin --template=default php artisan panel:generate admin --update-vite php artisan panel:generate admin --skip-views php artisan panel:generate admin --skip-js php artisan panel:generate admin --skip-css php artisan panel:generate admin --skip-assets php artisan panel:generate admin --skip-controllers php artisan panel:generate admin --skip-requests php artisan panel:generate admin --skip-middleware php artisan panel:generate admin --skip-traits php artisan panel:generate admin --skip-routes php artisan panel:generate admin --skip-package-json
Generate CRUD modules for a panel
Use this command when the panel already exists, or when you want the command to create/update the panel route file automatically:
php artisan panel:make-module User --panel=admin php artisan panel:make-module Product --panel=vendor
With custom fields:
php artisan panel:make-module User --panel=admin --fields="name:string,email:string,password:string,status:boolean" php artisan panel:make-module Product --panel=admin --fields="name:string,description:text:nullable,price:decimal,status:boolean"
For User in the admin panel, the command creates files only when they do not already exist:
app/Models/User.php
app/Http/Controllers/Admin/UserController.php
app/Http/Requests/Admin/User/StoreUserRequest.php
app/Http/Requests/Admin/User/UpdateUserRequest.php
database/migrations/YYYY_MM_DD_HHMMSS_create_users_table.php
resources/views/admin/users/index.blade.php
resources/views/admin/users/create.blade.php
resources/views/admin/users/edit.blade.php
resources/views/admin/users/show.blade.php
resources/views/admin/users/_form.blade.php
routes/admin.php
It also appends this resource route inside the existing routes/admin.php group if the route is not already present:
Route::resource('users', \App\Http\Controllers\Admin\UserController::class);
Generated route names become:
admin.users.index
admin.users.create
admin.users.store
admin.users.show
admin.users.edit
admin.users.update
admin.users.destroy
Generated URL examples:
/admin/users
/admin/users/create
/admin/users/{user}/edit
Module command options
php artisan panel:make-module User --panel=admin
php artisan panel:make-module User --panel=admin --force
php artisan panel:make-module User --panel=admin --register-route
php artisan panel:make-module User --panel=admin --fields="name:string,email:string,status:boolean"
php artisan panel:make-module User --panel=admin --table=users
php artisan panel:make-module User --panel=admin --route-uri=users
php artisan panel:make-module User --panel=admin --route-name=users
php artisan panel:make-module User --panel=admin --skip-model
php artisan panel:make-module User --panel=admin --skip-migration
php artisan panel:make-module User --panel=admin --skip-controller
php artisan panel:make-module User --panel=admin --skip-requests
php artisan panel:make-module User --panel=admin --skip-views
php artisan panel:make-module User --panel=admin --skip-routes
Use --register-route when the command creates a new routes/{panel}.php file and you also want it to add this line to routes/web.php:
require __DIR__ . '/admin.php';
Field syntax
Use this format:
field:type
field:type:nullable
Examples:
--fields="name:string,email:string,status:boolean" --fields="title:string,description:text:nullable,price:decimal,published_at:date:nullable" --fields="category_id:foreignId,name:string,sort_order:integer,status:boolean"
Supported basic types:
string
text
longText
integer
bigInteger
foreignId
boolean
date
dateTime
timestamp
decimal
json
Where to customize module CRUD templates
Default module templates are inside the package:
resources/modules/default/
models/
migrations/
controllers/
requests/
views/
routes/
To publish editable module templates into your Laravel app:
php artisan vendor:publish --tag=panel-generator-modules
Then edit:
resources/vendor/panel-generator/modules/default/
You can also create a module-specific template. For example:
resources/vendor/panel-generator/modules/user/
resources/vendor/panel-generator/modules/product/
The command checks the module-specific template first, then falls back to default.
Important module template tokens
Use these tokens inside module model, migration, controller, request, view, and route templates:
___PANEL_SLUG___
___PANEL_CLASS___
___PANEL_VIEW_NAMESPACE___
___PANEL_CONTROLLER_NAMESPACE___
___MODULE_CLASS___
___MODULE_TITLE___
___MODULE_PLURAL_TITLE___
___MODULE_VARIABLE___
___MODULE_PLURAL_VARIABLE___
___MODULE_TABLE___
___MODULE_ROUTE_URI___
___MODULE_ROUTE_NAME___
___MODULE_ROUTE_PREFIX___
___MODULE_VIEW_NAMESPACE___
___MODULE_MODEL_NAMESPACE___
___MODULE_MODEL_FULL_CLASS___
___MODULE_CONTROLLER_NAMESPACE___
___MODULE_REQUEST_NAMESPACE___
___MODULE_STORE_REQUEST_CLASS___
___MODULE_UPDATE_REQUEST_CLASS___
___MODULE_FILLABLE_ARRAY___
___MODULE_CASTS_ARRAY___
___MODULE_MIGRATION_COLUMNS___
___MODULE_STORE_RULES___
___MODULE_UPDATE_RULES___
___MODULE_FORM_FIELDS___
___MODULE_TABLE_HEADERS___
___MODULE_TABLE_CELLS___
___MODULE_SHOW_ROWS___
For User --panel=admin, examples become:
___PANEL_VIEW_NAMESPACE___ => admin
___MODULE_VIEW_NAMESPACE___ => admin.users
___MODULE_ROUTE_PREFIX___ => admin.users.
___MODULE_MODEL_FULL_CLASS___ => App\Models\User
统计信息
- 总下载量: 1
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 5
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-06-13