PHP code example of gsebastiao / laravel-menu

1. Go to this page and download the library: Download gsebastiao/laravel-menu 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/ */

    

gsebastiao / laravel-menu example snippets


use Gsebastiao\LaravelMenu\Models\MenuItem;

// Um item de topo que leva a uma rota
MenuItem::create([
    'name'  => 'dashboard',
    'label' => 'Dashboard',
    'route' => 'dashboard',
    'order' => 1,
]);

// Um grupo (sem link) com dois filhos
$admin = MenuItem::create([
    'name'  => 'admin',
    'label' => 'Administração',
    'order' => 2,
]);

MenuItem::create([
    'parent_id' => $admin->id,
    'name'      => 'admin.users',
    'label'     => 'Utilizadores',
    'route'     => 'users.index',
    'badge'     => 'novo',
]);

MenuItem::create([
    'parent_id'    => $admin->id,
    'name'         => 'admin.separador',
    'label'        => '—',
    'is_separator' => true,
]);

use Gsebastiao\LaravelMenu\Facades\Menu;

public function boot(): void
{
    Menu::resolvePermissionsUsing(function ($user) {
        // Devolve os nomes das permissões (no modo 'id', os ids).
        return $user?->permissions()->pluck('name') ?? [];
    });
}

// config/menu.php
'user_permissions' => \App\Support\MenuPermissions::class,

// app/Support/MenuPermissions.php
namespace App\Support;

class MenuPermissions
{
    public function __invoke($user): iterable
    {
        return $user?->permissions()->pluck('name') ?? [];
    }
}

use Gsebastiao\LaravelAuthz\Traits\HasAuthz;

class User extends Authenticatable
{
    use HasAuthz;
}

MenuItem::create([
    'name'       => 'users',
    'label'      => 'Utilizadores',
    'route'      => 'users.index',
    'permission' => 'users.view',   // o nome da permissão, tal como está no laravel-authz
]);

Route::get('/utilizadores', [UserController::class, 'index'])
    ->middleware(['auth', 'menu.permission:users.view']);

Menu::hasPermission('users.create');                 // true / false
Menu::hasPermission(['users.create', 'users.edit']); // true se tiver PELO MENOS UMA

Route::get('/utilizadores', [UserController::class, 'index'])
    ->middleware(['auth', 'menu.permission:users.view']);

// Com várias permissões, basta ter UMA delas:
Route::get('/relatorios', [ReportController::class, 'index'])
    ->middleware(['auth', 'menu.permission:reports.view,reports.export']);

Menu::flushCache();   // limpa
Menu::rebuildCache(); // limpa e volta a guardar

$item->audits; // histórico deste item

namespace App\Models;

use Gsebastiao\Auditable\Support\AuditOptions;
use Gsebastiao\LaravelMenu\Models\MenuItem as BaseMenuItem;

class MenuItem extends BaseMenuItem
{
    public function getAuditOptions(): AuditOptions
    {
        return parent::getAuditOptions()->except(['badge', 'order']);
    }
}

Menu::resolvePermissionsUsing(function ($user) {
    if ($user?->hasRole('super-admin')) {
        return \Spatie\Permission\Models\Permission::pluck('name');
    }

    return $user?->getAllPermissions() ?? [];
});
bash
php artisan migrate
bash
php artisan vendor:publish --tag=laravel-menu-seeders
bash
php artisan db:seed --class=MenuItemsSeeder
bash
php artisan vendor:publish --tag=laravel-menu-views
bash
php artisan laravel-menu:cache --flush  # só limpa
bash
php artisan migrate
bash
php artisan vendor:publish --tag=laravel-menu-config