salahhusa9/laravel-menu

为Laravel生成HTML菜单的工具


README

Latest Version on Packagist GitHub Tests Action Status PHPStan Status Total Downloads

这是一个在Laravel应用程序中构建菜单的有用包,它可以帮助简化您应用程序中创建和管理菜单的过程。

安装

您可以通过composer安装此包

composer require salahhusa9/laravel-menu

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="menu-config"

可选地,您可以使用以下命令发布视图

php artisan vendor:publish --tag="menu-views"

使用

基本

您可以在应用程序中的任何位置创建菜单,但最佳位置是在AppServiceProvider.php文件中的boot()方法。

use SalahHusa9\Menu\Facades\Menu;

public function boot()
{
    Menu::add('test', 'route.name', 'fa fa-home');
}

使用add()方法向菜单中添加项目。您可以通过多次调用add()来添加多个项目。

Menu::add('test')
    ->add('test2');

要创建子菜单,请在菜单项上调用addSubmenu(),然后使用add()方法向子菜单中添加项目。

Menu::add('test')
    ->add('test2')
    ->addSubmenu('test3', function ($submenu) {
        $submenu->add('test4');
    })
    ->add('test5');

Blade

要渲染菜单,请使用<x-menu /> blade组件。

<x-menu />

菜单的自定义

您可以通过将图标参数传递给add()方法将图标添加到菜单项。

Menu::add('test', 'route.name', ['icon' => 'fa fa-home']);

您还可以通过将id和class参数传递给add()方法将id和class添加到菜单项。

Menu::add('test', 'route.name',['class' => 'customClass', 'id' => 'customId']);

您还可以通过将target参数传递给add()方法将目标添加到菜单项。

Menu::add('test', 'route.name', ['target' => '_blank']);

您还可以通过将badgeClass和badgeName参数传递给add()方法将徽章添加到菜单项。

Menu::add('test', 'route.name', ['badgeClass' => 'badge badge-success', 'badgeName' => 'New']);

您还可以

// old:
if (auth()->user()->can('gateName')){
    Menu::add('test', 'route.name');
}
// new:
Menu::add('test', 'route.name', ['gateName' => 'gateName']);

菜单视图的自定义

您可以通过发布视图来自定义菜单视图

php artisan vendor:publish --tag="menu-views"

多个菜单

您可以在应用程序中创建多个菜单

    Menu::make('sidebar', function ($menu) {
        $menu->add('test', 'route.name');
    });

    Menu::make('main', function ($menu) {
        $menu->add('test', 'route.name');
    });

要渲染菜单,请使用<x-menu for="sidebar" /> blade组件。

配置默认菜单的Ul和Li类以及活动类

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="menu-config"

并且您可以更改默认菜单的Ul和Li类以及活动类

return [
    "ul_class" => "menu-inner py-1", // default menu class
    "ul_sub_menu_class" => "menu-sub", // default submenu class

    "li_class" => "menu-item", // default menu item class
    "li_sub_menu_class" => "menu-item", // default submenu item class
    "li_sub_menu_open_class" => "menu-item active open", // default submenu item class when open

    "a_class" => "menu-link", // default menu link class
    "a_sub_menu_class" => "menu-link menu-toggle", // default submenu link class

    "icon_class" => "menu-icon", // default menu icon class

    "li_active_class" => "active", // default active class of li
    "a_active_class" => "active", // default active class of a

    "badge_class" => "badge rounded-pill ms-auto", // default badge class
];

高级

每个项目接受以下参数

add(
    $name,
    $routeName = null,
    $options = [],
)

addSubmenu(
    $name,
    callback $callbackOfSubmenu,
    $options
)

还有其他您可以使用的功能

Menu::getMenuAsJson(); // return the menu as json
Menu::renderAsJson(); // return the menu as json
Menu::renderAsHtml(); // return the menu as html

路线图

查看公开问题以获取功能建议(和已知问题)的列表。

测试

composer test

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

贡献

请参阅CONTRIBUTING以获取详细信息。

安全漏洞

请审查我们的安全策略以了解如何报告安全漏洞。

致谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件