di-zatech/module-menu

此包为laravel应用程序中的模块提供菜单生成器。

安装: 232

依赖: 2

建议者: 0

安全: 0

星标: 2

关注者: 2

分支: 1

开放问题: 0

语言:Blade

类型:laravel-package

v1.3.5 2023-09-02 13:06 UTC

This package is auto-updated.

Last update: 2024-10-01 00:06:02 UTC


README

此包包含用于laravel模块的菜单管理和菜单生成器。

安装

使用Composer

composer require dizatech/module-menu

packagist : https://packagist.org.cn/packages/dizatech/module-menu

管理面板使用

  • 发布blade文件

php artisan vendor:publish --tag=module-menu

**请注意,如果您已经发布了供应商,为了更新,您可以运行以下命令

php artisan vendor:publish --tag=module-menu --force

  • 运行以下命令

php artisan migrate

  • 将以下代码添加到模块服务提供者中,在boot()函数的末尾

\ModuleMenu::init('ExampleModule');

请注意,ExampleModule 是您的模块名称

  • 在您的侧边栏布局中添加以下标签(模块菜单将通过 modules 类型渲染,菜单管理器将通过 manager 类型渲染)

<x-module-menu type="modules"></x-module-menu>

<x-module-menu type="manager"></x-module-menu>

或缩短标签

<x-module-menu type="modules" />

<x-module-menu type="manager" />

请注意,x-module-menu 标签的默认类型为 manager

前端使用

要加载桌面菜单,您必须使用此标签

<x-front-menu menuGroup="desktop-navbar-menu"></x-front-menu>

要加载移动菜单,您必须使用此标签

<x-front-menu menuGroup="mobile-navbar-menu"></x-front-menu>

创建菜单

使用UI(菜单管理器)

  • 从您的面板中的 menu/create,您可以创建新菜单

  • 在以下URL中管理创建的菜单

http://example.com/example-panel/menu

请注意,创建的菜单仅在数据库中的 module_menus 表中可用,如果您想有可迁移的菜单,请使用 Laravel Seeder

使用Laravel Seeder

包或核心的标准结构(需要4个seeder)

  • 对于包,您可以使用pacman(包管理器)简单地创建seeder。

下载并安装pacman : https://packagist.org.cn/packages/dizatech/pacman

MenuSeeder

创建菜单项

  • 使用 php artisan pacman:seeder <package_name>MenuSeeder <package_name> 命令创建 <package_name>MenuSeeder

  • run() 方法中添加每个菜单,分别在 if 条件中,如下代码所示

** 父菜单(第一个父菜单名称必须等于包名称)

if (DB::table('module_menus')->where('name','<menu_name>')->count() == 0){ // for first parent you must use package_name for menu_name
    $parentID = DB::table('menu_menus')->insertGetId([ // set parent id of menu in $parentID variable
        'name' => '<menu_name>', // for first parent you must use package_name for menu_name
        'title' => '<package_first_parent_name>', // e.g. فرم ها
        'icon' => '<menu_icon>', // e.g. fa fa-wpforms
        'route' => '<menu_route>', // e.g. form.index
        'parent_id' => '0', // 0 for parent
        'creator_id' => '1', // creator user_id
        'created_at' => now()->toDateTimeString(), 
        'updated_at' => now()->toDateTimeString(),
        'deleted_at' => null,
    ]);
}

** 子菜单

if (DB::table('module_menus')->where('name','<menu_name>')->count() == 0){
    DB::table('module_menus')->insert([
        'name' => '<menu_name>', // menu name, e.g. site_forms
        'title' => '<child_name>', // menu title, e.g. ایجاد فرم
        'icon' => '<menu_icon>', // child menu icon, e.g. fa fa-circle-o
        'route' => '<menu_route>', // menu route, e.g. form.index
        'parent_id' => $parentID, // menu parent id, can be dynamic
        'creator_id' => '1', // creator user_id
        'created_at' => now()->toDateTimeString(),
        'updated_at' => now()->toDateTimeString(),
        'deleted_at' => null,
    ]);
}

PermissionsSeeder

为每个菜单项创建权限

  • 使用 php artisan pacman:seeder <package_name>PermissionsSeeder <package_name> 命令创建 <package_name>PermissionsSeeder

  • run() 方法中添加权限,分别在 if 条件中,如下代码所示

if (DB::table('permissions')->where('name','<permission_name>')->count() == 0){ // e.g. forms_access 
     DB::table('permissions')->insert([
          'name' => '<permission_name>', // e.g. forms_access 
          'display_name' => '<permission_display_name>', // e.g. دسترسی فرم ها
          'description' => '<permission_description>', // e.g. امکان دسترسی به فرم ها
          'created_at' => now()->toDateTimeString(),
          'updated_at' => now()->toDateTimeString()
     ]);
}

MenuPermissionsSeeder

将每个菜单连接到特定的权限

  • 使用 php artisan pacman:seeder <package_name>MenuPermissionsSeeder <package_name> 命令创建 <package_name>MenuPermissionsSeeder

  • run() 方法中添加以下代码(首先查找菜单,然后附加权限)

$parentMenu = ModuleMenu::where('name', '<parent_menu_name>')->first();
$childMenu = ModuleMenu::where('name', '<child_menu_name>')->first();

$parentMenu->permissions()->sync(Permission::where('name', '<permission_name>')->pluck('id'));
$childMenu->permissions()->sync(Permission::where('name', '<permission_name>')->pluck('id'));

RolePermissionsSeeder

将每个权限连接到特定的角色

  • 使用 php artisan pacman:seeder <package_name>RolePermissionsSeeder <package_name> 命令创建 <package_name>RolePermissionsSeeder

  • run() 方法中添加以下代码(首先找到角色,然后将其权限附加到它上面)

$<role_name> = Role::where('name', '<role_name>')->first(); // main role

$permissions = DB::table('permissions')->whereIn('name', [
     '<permission_name_one>',
     '<permission_name_two>',
     ...
])->get()->pluck('id');
$<role_name>->permissions()->sync($permissions, false);

在 Laravel 核心中添加新的种子文件

  • /database/seeders/DatabaseSeeder.php 中添加新的种子文件
public function run()
{
  $this->call([
     ProvinceSeeder::class,
     UserSeeder::class,
     // new classes goes here
  ]);
}

laravel 种子文件的最后一步

  • 运行 artisan seed

php artisan db:seed

  • 清除所有缓存

php artisan cache:clear

php artisan view:clear

php artisan route:clear

变更日志

https://github.com/dizatech/module-menu/wiki/ChangeLog