alirezab/admin-panel
AdminPanel is a Laravel admin panel starter package. Install via Composer, publish vendor assets, then scaffold Vue + auth with laravel/ui. Optional developer tools include Debugbar and Laravel IDE Helper for code completion and model metadata.
Installation
composer require besharatnia/admin-panel
Publish the package assets and config:
php artisan vendor:publish --provider="Besharatnia\AdminPanel\AdminPanelServiceProvider"
Configuration
.env with:
ADMIN_PANEL_ENABLED=true
ADMIN_PANEL_PREFIX=admin
config/admin-panel.php) and adjust RTL/LTR settings, menu structure, and branding.First Use Case
routes/web.php:
Route::group(['prefix' => config('admin-panel.prefix'), 'middleware' => ['web', 'auth']], function () {
\Besharatnia\AdminPanel\Facades\AdminPanel::routes();
});
namespace App\Http\Controllers\Admin;
use Besharatnia\AdminPanel\AdminController;
class DashboardController extends AdminController
{
public function index()
{
return view('admin.dashboard');
}
}
config/admin-panel.php under menu:
'menu' => [
[
'name' => 'Dashboard',
'icon' => 'fa fa-dashboard',
'route' => 'admin.dashboard',
],
],
resources/views/admin/dashboard.blade.php.Menu Management
menu config array or middleware:
// In a middleware or service provider
AdminPanel::setMenu([
['name' => 'Users', 'route' => 'admin.users.index'],
]);
AdminPanel::menu() helper to render the menu in custom views.Authentication
ADMIN_PANEL_MIDDLEWARE config:
'middleware' => ['auth', 'verified', 'role:admin'],
resources/views/vendor/admin-panel/auth/login.blade.php.Views and Layouts
resources/views/vendor/admin-panel/layouts/app.blade.php) for global changes.@include('admin-panel::partials.header') to embed package partials (e.g., header, sidebar).RTL/LTR Support
config/admin-panel.php:
'rtl' => env('ADMIN_PANEL_RTL', false),
AdminPanel::direction() helper in Blade:
@if(AdminPanel::direction() === 'rtl')
<link rel="stylesheet" href="{{ asset('css/rtl.css') }}">
@endif
CRUD Operations
AdminController base class for common admin logic (e.g., authorization, breadcrumbs):
use Besharatnia\AdminPanel\AdminController;
class UserController extends AdminController
{
public function __construct()
{
parent::__construct();
$this->middleware('can:manage-users');
}
}
Asset Management
AdminPanel::assets() helper:
@AdminPanel::assets()
<link rel="stylesheet" href="{{ asset('css/admin-custom.css') }}">
@endAdminPanel
Route Conflicts
ADMIN_PANEL_PREFIX doesn’t clash with existing routes. Test with:
php artisan route:list | grep admin
Middleware Order
AdminPanel middleware after auth in app/Http/Kernel.php to avoid bypassing auth checks:
'admin' => [
\Besharatnia\AdminPanel\Middleware\AdminPanelMiddleware::class,
],
Asset Loading
public_path() in config/admin-panel.php and clear cached views:
php artisan view:clear
RTL Quirks
/* Override RTL-specific issues */
.rtl .some-class { direction: ltr !important; }
Deprecated Features
Menu Caching
config/admin-panel.php are cached. Clear config cache after changes:
php artisan config:clear
Enable Debug Mode
APP_DEBUG=true in .env to surface template errors or missing views.Log Admin Events
AdminPanelServiceProvider to log admin panel usage:
public function boot()
{
AdminPanel::on('menu.render', function ($menu) {
\Log::debug('Admin menu rendered', ['menu' => $menu]);
});
}
Inspect Middleware
php artisan route:list to verify middleware is applied to admin routes.Check Published Files
resources/views/vendor/admin-panel/public/vendor/admin-panel/Custom Views
resources/views/vendor/admin-panel/layouts/app.blade.php) for full control.Dynamic Menu Items
$menu = AdminPanel::menu();
$menu = array_merge($menu, DB::table('admin_menu')->get()->toArray());
AdminPanel::setMenu($menu);
Event Listeners
menu.render, auth.attempt) in EventServiceProvider:
protected $listen = [
'Besharatnia\AdminPanel\Events\MenuRendering' => [
'App\Listeners\LogAdminMenu',
],
];
Localization
resources/lang/vendor/admin-panel/ to customize labels or messages.API Integration
Route::middleware(['admin'])->group(function () {
Route::apiResource('admin/users', UserController::class);
});
How can I help you explore Laravel packages today?