PHP code example of saeedhosan / laravel-menus

1. Go to this page and download the library: Download saeedhosan/laravel-menus library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

saeedhosan / laravel-menus example snippets


use SaeedHosan\Menus\MenuBuilder;

class AdminMenu extends MenuBuilder
{
    public function items(): array
    {
        return [
            [
                'name' => 'Dashboard',
                'slug' => 'admin.dashboard',
                'link' => route('admin.dashboard'),
                'icon' => '<i class="ki-outline ki-home"></i>',
                'active' => request()->routeIs('admin.dashboard'),
            ],
            [
                'name' => 'Users',
                'slug' => 'admin.users',
                'link' => route('admin.users.index'),
                'active' => request()->routeIs('admin.users.*'),
                'access' => 'manage-users',
            ],
        ];
    }
}

use SaeedHosan\Menus\Menu;

// Root menu
Menu::create(AdminMenu::class);

// Child menu — items appended to AdminMenu
Menu::create(ReportsMenu::class, AdminMenu::class);

// Insert after a specific slug
Menu::create(ReportsMenu::class, AdminMenu::class)->after('admin.users');

// Insert before a specific slug
Menu::create(ReportsMenu::class, AdminMenu::class)->before('admin.users');

// Insert into a specific item's submenu
Menu::create(ReportsMenu::class, AdminMenu::class)->whereSlug('admin.settings');

// Force as submenu of matched item
Menu::create(ReportsMenu::class, AdminMenu::class)->asSubmenu()->whereSlug('admin.settings');

// Filter which items get merged
Menu::create(ReportsMenu::class, AdminMenu::class)->filter(fn ($item) => $item['slug'] !== 'hidden');

Menu::update(ReportsMenu::class, NewParentMenu::class)->after('some.slug');

$items = Menu::make()->items();

return view('layouts.app', ['items' => $items]);

{!! Menu::make()->toHtml() !!}

// config/laravel-menus.php
'access_callback' => \SaeedHosan\Menus\Access\GateAccessCallback::class,

[
    'name' => 'Reports',
    'slug' => 'reports',
    'access' => 'view-reports',        // single permission
    // 'access' => ['view-reports', 'admin'], // multiple permissions
]

class MyAccessCallback
{
    public function __invoke(string|array $permissions): bool
    {
        // your logic
    }
}

class AdminMenu extends MenuBuilder
{
    public function renderable(): bool
    {
        return auth()->user()?->isAdmin() ?? false;
    }

    public function items(): array
    {
        return [ /* ... */ ];
    }
}

class AdminMenu extends MenuBuilder
{
    public function items(): array
    {
        return [
            [
                'name' => 'Feature',
                'slug' => 'feature',
                'badge' => $this->badgeNew(),    // "New" green badge
                // 'badge' => $this->badgeBeta(),  // "Beta" primary badge
                // 'badge' => $this->badgeSoon(),  // "Soon" light badge
                // 'badge' => $this->badgeInfo(),  // "info" info badge
            ],
        ];
    }
}
bash
php artisan vendor:publish --tag=laravel-menus-config
php artisan vendor:publish --tag=laravel-menus-views
bash
php artisan vendor:publish --tag=laravel-menus-views