Nova 仪表盘提供了一种便捷的方式来构建包含各种 指标 和 卡片 的信息概览页面。
Nova 附带一个默认的 App\Nova\Dashboards\Main
仪表盘类,其中包含一个 cards
方法。您可以通过此方法自定义默认仪表盘上显示的卡片。
/**
* 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
目录中
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
{
/**
* Get the cards for the dashboard.
*
* @return array
*/
public function cards()
{
return [
TotalUsers::make(),
UsersOverTime::make(),
];
}
}
默认情况下,Nova 将使用仪表盘的类名来确定仪表盘的可显示名称,该名称应放置在左侧导航栏中。您可以通过覆盖仪表盘类中的name
方法来自定义左侧导航栏中显示的仪表盘名称
/**
* Get the displayable name of the dashboard.
*
* @return string
*/
public function name()
{
return 'User Insights';
}
如果您需要更改仪表盘的 URI,可以覆盖仪表盘类的uriKey
方法。当然,URI 代表当您单击左侧导航栏中的仪表盘链接时,Nova 将导航到的浏览器位置
/**
* Get the URI key of the dashboard.
*
* @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;
/**
* Get the dashboards that should be listed in the Nova sidebar.
*
* @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;
/**
* 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
方法具有相同的参数签名。
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),
];
}