logo

仪表盘

概述

Nova 仪表盘提供了一种便捷的方法来构建信息概览页面,其中包含各种 指标卡片

Dashboard

默认仪表盘

Nova 附带一个默认的 App\Nova\Dashboards\Main 面板类,其中包含一个 cards 方法。你可以通过该方法自定义默认仪表板上的卡片:

php
/**
 * 获取应显示在 Nova 仪表板上的卡片。
 *
 * @return array
 */
public function cards()
{
    return [
        new Help,
    ];
}

有关仪表盘指标的更多信息,请参阅我们的 指标文档

定义仪表板

可使用 nova:dashboard Artisan 命令生成自定义仪表盘。默认情况下,所有新仪表盘都将放在 app/Nova/Dashboards 目录中:

bash
php artisan nova:dashboard UserInsights

生成仪表盘类后,就可以对其进行自定义了。每个仪表盘类都包含一个 cards 方法。该方法应返回一个卡片或度量类的数组:

php
<?php

namespace App\Nova\Dashboards;

use Laravel\Nova\Dashboard;
use App\Nova\Metrics\TotalUsers;
use App\Nova\Metrics\UsersOverTime;

class UserInsights extends Dashboard
{
    /**
     * 为仪表盘准备卡片。
     *
     * @return array
     */
    public function cards()
    {
        return [
            TotalUsers::make(),
            UsersOverTime::make(),
        ];
    }
}

仪表板名称

默认情况下,Nova 将使用仪表板的类名来确定仪表板的可显示名称,并将其放置在左侧导航栏中。你可以通过重写仪表盘类中的 name 方法来定制左侧导航栏中显示的仪表盘名称:

php
/**
 * 获取仪表盘的可显示名称。
 *
 * @return string
 */
public function name()
{
    return 'User Insights';
}

仪表板 URI key

如果需要更改仪表盘的 URI,可以覆盖仪表盘类的 uriKey 方法。当然,URI 代表的是 Nova 浏览器的位置,当你点击左侧导航栏中的仪表盘链接时,Nova 将导航到该位置:

php
/**
 * 获取仪表盘的 URI key。
 *
 * @return string
 */
public function uriKey()
{
    return 'user-insights-improved';
}

注册仪表板

要注册仪表板,请将仪表板添加到应用程序的 App/Providers/NovaServiceProvider 类的 dashboards 方法返回的数组中。将仪表板添加到此方法后,它就可以在 Nova 的左侧导航栏中进行导航:

php
use App\Nova\Dashboards\Main;
use App\Nova\Dashboards\UserInsights;

/**
 * Get the dashboards that should be listed in the Nova sidebar.
 *
 * @return array
 */
protected function dashboards()
{
    return [
        Main::make(),
        UserInsights::make(),
    ];
}

自定义仪表板菜单

你可以通过在仪表盘类中定义一个 menu 方法来定制仪表盘的菜单:

php
use Illuminate\Http\Request;
use Laravel\Nova\Menu\MenuItem;

/**
 * Get the menu that should represent the dashboard.
 *
 * @return \Laravel\Nova\Menu\MenuItem
 */
public function menu(Request $request)
{
    return parent::menu($request)->withBadge(function () {
        return 'NEW!';
    });
}

更多信息请参阅 菜单 文档。

刷新仪表板指标

有时,你可能希望刷新仪表板中的所有指标。为此,你可以使用仪表盘实例上的 showRefreshButton 方法启用刷新按钮:

php
use App\Nova\Dashboards\Main;
use App\Nova\Dashboards\UserInsights;

/**
 * 获取应在 Nova 侧边栏中列出的仪表盘。
 *
 * @return array
 */
protected function dashboards()
{
    return [
        Main::make(),
        UserInsights::make()->showRefreshButton(),
    ];
}

授权

如果只想向某些用户公开给定的仪表板,可以在注册仪表板时调用 canSee 方法。canSee 方法接受一个闭包,该闭包应返回 truefalse。闭包将接收传入的 HTTP 请求:

php
use App\Models\User;
use App\Nova\Dashboards\Main;
use App\Nova\Dashboards\UserInsights;

/**
 * 获取应在 Nova 侧边栏中列出的仪表盘。
 *
 * @return array
 */
protected function dashboards()
{
    return [
        Main::make(),
        UserInsights::make()->canSee(function ($request) {
            return $request->user()->can('viewUserInsights', User::class);
        }),
    ];
}

在上面的例子中,我们在 User 模型上使用了 Laravel 的 Authorizable 特性的 can 方法来确定授权用户是否被授权查看 viewUserInsights 操作。不过,由于代理授权策略方法是 canSee 的常见用例,你可以使用 canSeeWhen 方法来实现相同的行为。canSeeWhen 方法与 Illuminate\Foundation\Auth\Access\Authorizable 特性的 can 方法具有相同的方法签名:

php
use App\Models\User;
use App\Nova\Dashboards\Main;
use App\Nova\Dashboards\UserInsights;

/**
 * 获取应在 Nova 侧边栏中列出的仪表盘。
 *
 * @return array
 */
protected function dashboards()
{
    return [
        Main::make(),
        UserInsights::make()->canSeeWhen('viewUserInsights', User::class),
    ];
}