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

v1.0.0 2026-02-24 21:57 UTC

This package is auto-updated.

Last update: 2026-02-24 22:01:30 UTC


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');
    }

    //....
}