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

Nova 附带一个默认的 App\Nova\Dashboards\Main 面板类,其中包含一个 cards 方法。你可以通过该方法自定义默认仪表板上的卡片:
/**
* 获取应显示在 Nova 仪表板上的卡片。
*
* @return array
*/
public function cards()
{
return [
new Help,
];
}有关仪表盘指标的更多信息,请参阅我们的 指标文档。
可使用 nova:dashboard Artisan 命令生成自定义仪表盘。默认情况下,所有新仪表盘都将放在 app/Nova/Dashboards 目录中:
php artisan nova:dashboard UserInsights生成仪表盘类后,就可以对其进行自定义了。每个仪表盘类都包含一个 cards 方法。该方法应返回一个卡片或度量类的数组:
<?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 方法来定制左侧导航栏中显示的仪表盘名称:
/**
* 获取仪表盘的可显示名称。
*
* @return string
*/
public function name()
{
return 'User Insights';
}如果需要更改仪表盘的 URI,可以覆盖仪表盘类的 uriKey 方法。当然,URI 代表的是 Nova 浏览器的位置,当你点击左侧导航栏中的仪表盘链接时,Nova 将导航到该位置:
/**
* 获取仪表盘的 URI key。
*
* @return string
*/
public function uriKey()
{
return 'user-insights-improved';
}要注册仪表板,请将仪表板添加到应用程序的 App/Providers/NovaServiceProvider 类的 dashboards 方法返回的数组中。将仪表板添加到此方法后,它就可以在 Nova 的左侧导航栏中进行导航:
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 方法来定制仪表盘的菜单:
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 方法启用刷新按钮:
use App\Nova\Dashboards\Main;
use App\Nova\Dashboards\UserInsights;
/**
* 获取应在 Nova 侧边栏中列出的仪表盘。
*
* @return array
*/
protected function dashboards()
{
return [
Main::make(),
UserInsights::make()->showRefreshButton(),
];
}如果只想向某些用户公开给定的仪表板,可以在注册仪表板时调用 canSee 方法。canSee 方法接受一个闭包,该闭包应返回 true 或 false。闭包将接收传入的 HTTP 请求:
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 方法具有相同的方法签名:
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),
];
}