kineticamobile/atrochar

Laravel 应用菜单生成器 - 使用数据库支持的菜单和 @menu Blade 组件在你的视图中填充菜单

v0.1.7 2020-11-27 08:47 UTC

This package is auto-updated.

Last update: 2024-08-27 17:12:02 UTC


README

Laravel 应用菜单生成器 - 使用数据库支持的菜单和 @menu Blade 组件在你的视图中填充菜单

安装

  1. 通过 Composer
$ composer require kineticamobile/atrochar
  1. 将特性添加到您的 用户 模型中。
use Kineticamobile\Atrochar\Traits\MenuAbilities;

class User extends Authenticatable
{

    use MenuAbilities;
  1. 运行迁移
$ php artisan migrate

简单用法

创建菜单及其项目

您可以在应用程序中访问菜单管理 "APP_URL/atrochar/menus"

或在您想要的位置添加链接

<a href="{{ route('atrochar.menus.index') }}"> {{ __('Menus') }} </a>

使用 blade 组件在您的视图中添加已创建的菜单

  • 使用菜单名称
    @menu("Dasboard")
  • 使用菜单 ID
    @menu(1)
  • 使用菜单对象
    $menu = Menu::find(1);
    [...]
    @menu($menu)

使用视图代替程序化方法

您可以将组件的视图发布出来

$ php artisan vendor:publish --tag=atrochar.views 

resources/views/vendors/atrochar 中您有两个视图,default.blade.phpjetstream.blade.php

以下是一些使用示例

  • @menuview($menu) 使用 default

  • @menuview($menu, 'jetstream') 使用 jetstream

高级用法

更改包路由的前缀

发布配置

$ php artisan vendor:publish --tag=atrochar.config

修改 conf/atrochar.php 中的字段 prefix。它允许空字符串,如果为 null,则使用 atrochar

更改 iframe 路由

通常 iframe 链接位于路由 atrochar/i/24

您可以在发布配置文件后,在 conf/atrochar.php 中的字段 iframe 中更改 i 为您想要的任何值

$ php artisan vendor:publish --tag=atrochar.config

限制对菜单管理的访问

默认情况下,所有用户都可以 管理 菜单。
您需要将方法 canManageMenus() 添加到您的用户模型中

    /**
     * @return bool
     */
    public function canManageMenus()
    {
        // For example
        return $this->hasRole('Admin');
    }

链接权限字段的用法

默认情况下,所有项目都可以 查看。但您可以在链接中添加权限,如果不为空,则此功能会与用户方法 canViewMenuItem($ability) 进行检查
您需要将方法 canViewMenuItem($ability) 添加到您的用户模型中以扩展此行为

    /**
     * @return bool
     */
    public function canViewMenuItem($ability)
    {
        // For example
        return $this->getAllPermissions()->pluck('name')->contains($ability);
    }

使用主题或重写默认值来设计您的菜单样式

使用主题。在您的应用程序中发布配置文件。在 config/atrochar.php 中,您可以修改默认值或添加新主题

$ php artisan vendor:publish --tag=atrochar.config
return [
    "defaultTheme" => [
        "linkTag" => "a",
        "class" => "",
        "activeClass" => "",
        "listStartTag" => "<ul>",
        "listEndTag" => "</ul>",
        "itemStartTag" => "<li>",
        "itemEndTag" => "</li>",
    ],
    "themes" => [
        "jetstream" => [
            "linkTag" => "a",
            "class" =>       "inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 text-gray-500 hover:text-gray-700 hover:border-gray-300 focus:outline-none focus:text-gray-700 focus:border-gray-300 transition duration-150 ease-in-out",
            "activeClass" => "inline-flex items-center px-1 pt-1 border-b-2 border-indigo-400 text-sm font-medium leading-5 text-gray-900 focus:outline-none focus:border-indigo-700 transition duration-150 ease-in-out",
            "listStartTag" => "",
            "listEndTag" => "",
            "itemStartTag" => "",
            "itemEndTag" => "",
        ]
    ]
];

一旦您创建了一个主题,您可以在 @menu 组件的第二个参数中传递一个字符串,即主题的名称

    @menu("Dasboard", "jetstream")

如果您传递一个数组作为第二个参数,则这些值将覆盖默认Theme的值

    @menu($menu, ["class" => "bg-gray-500 font-mono"])

安全

如果您发现任何与安全相关的问题,请通过电子邮件而不是使用问题跟踪器发送给作者。

致谢

许可

MIT