saeedhosan / laravel-menus
The package is for menu builder
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/saeedhosan/laravel-menus
Requires
- php: ^8.2.0
- laravel/framework: ^11.0|^12.0
Requires (Dev)
- laravel/pint: ^1.26
- orchestra/testbench: ^10.8
- pestphp/pest: ^3.8
- pestphp/pest-plugin-arch: ^3.1
- phpstan/phpstan: ^2.1
- symfony/var-dumper: ^7.4
README
Simple, flexible menu builder for Laravel.
Install
composer require saeedhosan/laravel-menus
Publish (optional)
php artisan vendor:publish --tag=laravel-menus-config php artisan vendor:publish --tag=laravel-menus-views
Build A Menu
use SaeedHosan\Menus\Menu; use App\Menus\AdminMenu; Menu::create(AdminMenu::class); Menu::make()->render()->toArray(); Menu::make()->toArray(); // or cached items Menu::make()->toHtml(); // or build html
Add Items To Another Menu
Menu::create(NewAdminMenu::class, AdminMenu::class)->after('admin.clients'); Menu::create(SystemMenu::class, NewAdminMenu::class)->after('admin.clients');
Update Existing
Menu::update(SystemMenu::class, NewAdminMenu::class)->after('admin.clients');
Filter Placement
Menu::create(ExtraMenu::class, AdminMenu::class)->before('lead-list.vendors'); Menu::create(BillingMenu::class, AdminMenu::class)->whereSlug('billing'); Menu::create(BillingMenu::class, AdminMenu::class)->asSubmenu()->whereSlug('billing');
Access Control
// config/laravel-menus.php 'access_callback' => \SaeedHosan\Menus\Access\GateAccessCallback::class,
// per item [ 'name' => 'Reports', 'slug' => 'reports', 'access' => ['view-reports', 'admin'], ]
Render Blade
return view('any', [ 'items' => Menu::make()->toArray(), ]);
Menu Builder
use SaeedHosan\Menus\MenuBuilder; class AdminMenu extends MenuBuilder { public function renderable(): bool { return true; } public function items(): array { return [ [ 'name' => 'Dashboard', 'slug' => 'admin.dashboard', 'link' => route('admin.dashboard'), 'active' => request()->routeIs('admin.dashboard'), ], ]; } }
Renderable condition
use SaeedHosan\Menus\MenuBuilder; use Illuminate\Support\Facades\Gate; class AdminMenu extends MenuBuilder { public function renderable(): bool { return Gate::has('access admin'); } //.... }