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') ?? [];
});
}
// 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
]);
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']);
}
}