logo

仪表盘

概述

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

Dashboard

默认仪表盘

Nova 附带一个默认的 App\Nova\Dashboards\Main 仪表盘类,其中包含一个 cards 方法。您可以通过此方法自定义默认仪表盘上显示的卡片。

php
/**
 * Get the cards that should be displayed on the Nova dashboard.
 *
 * @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
{
    /**
     * Get the cards for the dashboard.
     *
     * @return array
     */
    public function cards()
    {
        return [
            TotalUsers::make(),
            UsersOverTime::make(),
        ];
    }
}

仪表盘名称

默认情况下,Nova 将使用仪表盘的类名来确定仪表盘的可显示名称,该名称应放置在左侧导航栏中。您可以通过覆盖仪表盘类中的name 方法来自定义左侧导航栏中显示的仪表盘名称

php
/**
 * Get the displayable name of the dashboard.
 *
 * @return string
 */
public function name()
{
    return 'User Insights';
}

仪表盘 URI 键

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

php
/**
 * Get the URI key of the dashboard.
 *
 * @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;

/**
 * Get the dashboards that should be listed in the Nova sidebar.
 *
 * @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;

/**
 * Get the dashboards that should be listed in the Nova sidebar.
 *
 * @return array
 */
protected function dashboards()
{
    return [
        Main::make(),
        UserInsights::make()->canSee(function ($request) {
            return $request->user()->can('viewUserInsights', User::class);
        }),
    ];
}

在上面的示例中,我们使用 Laravel 的 Authorizable 特性中的 can 方法,在我们的 User 模型上判断授权用户是否被授权执行 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;

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