Laravel Nova - 重新排序左侧导航菜单项

2022-08-30 22:41:52

默认情况下,左侧菜单项的顺序按字母顺序排列。

我的客户想要手动订购这些菜单。任何想法如何使它成为可能?

enter image description here

转到答案


答案 1

你可以在

App\Providers\NovaServiceProvider.php

添加一个方法 resources() 并手动注册资源,如

 protected function resources()
    {
        Nova::resources([
            User::class,
            Post::class,
        ]);
    }

互生

这个要点中提到了另一种方式,这似乎也很好,但官方文档还没有提到它。

资源

<?php

namespace App\Nova;

class User extends Resource
{
    /**
     * The model the resource corresponds to.
     *
     * @var string
     */
    public static $model = 'App\\User';

    /**
     * Custom priority level of the resource.
     *
     * @var int
     */
    public static $priority = 1;

    // ...
}

和在 NovaServiceProvider 中

<?php

namespace App\Providers;

use Laravel\Nova\Nova;
use Laravel\Nova\Cards\Help;
use Illuminate\Support\Facades\Gate;
use Laravel\Nova\NovaApplicationServiceProvider;

class NovaServiceProvider extends NovaApplicationServiceProvider
{
   /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        Nova::sortResourcesBy(function ($resource) {
            return $resource::$priority ?? 99999;
        });
    }
}

这样,您可以设置资源的优先级,并根据优先级呈现资源。


答案 2

更简洁的方式,并在最新的Nova 3.x上进行了测试。此外,自2.10+版本以来,它已被添加到Nova中,您需要做的就是在nova类上添加一个静态属性。例如,客户端将是:

/**
 * The side nav menu order.
 *
 * @var int
 */
public static $priority = 2;

然后,您可以使用NovaServiceProvider告诉nova使用您的自定义排序。您可以将代码放在boot method

public function boot()
{
    Nova::sortResourcesBy(function ($resource) {
        return $resource::$priority ?? 9999;
    });
}

**参考新星私人回购


推荐