Laravel Nova 注册 Metrics
一旦您定义了 metric,即可将指标附加到资源。Nova 生成的每个资源都包含一个 cards
方法。要将 metric 附加到资源,您只需将其添加到该方法返回的 metrics/cards 的数组中:
/**
* 获取资源可用的卡片。
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function cards(Request $request)
{
return [new Metrics\UsersPerDay];
}
资源详情 Metrics
除了在资源索引屏幕上放置 metrics 外,您还可以将 metric 附加到资源详细屏幕。例如,如果您构建一个播客应用程序,您可能希望显示用户在一段时间内创建的播客总数。要指示 metric 显示在详情页面而不是索引页面上,请将 onlyOnDetail
方法链接到您的 metric 注册:
/**
* 获取可用于请求的卡片。
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function cards(Request $request)
{
return [
(new Metrics\PodcastCount)->onlyOnDetail(),
];
}
当然,您需要修改 metric 的查询,以仅收集当前显示资源的 metric 数据。为此,您 metric 的 calculate
方法可以访问传入 $request
的 resourceId
属性:
use App\Podcast;
return $this->count(
$request,
Podcast::where('user_id', $request->resourceId)
);
Dashboard Metrics
您不仅限于在资源的索引屏幕上显示 metrics。您可以自由地向「仪表盘」 添加 metrics,这是 Nova 登录后显示的默认页面。默认情况下,此屏幕通过内置的 Help
卡片显示指向 Nova 文档的一些有用链接。要向仪表盘添加 metric,在 app/Providers/NovaServiceProvider
类的 cards
方法返回的数组中添加 metric:
use App\Nova\Metrics\NewUsers;
/**
* 获取应显示在 Nova 仪表板上的卡片
*
* @return array
*/
protected function cards()
{
return [
new NewUsers,
];
}
Metric 大小
默认情况下,metrics 占据 Nova 内容区域的三分之一。但是,您可以自由地将他们放大。为此,请在资源注册 metric 时调用 width
方法:
/**
* 获取可用于请求的卡。
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function cards(Request $request)
{
return [
// Two-thirds of the content area...
(new Metrics\UsersPerDay)->width('2/3'),
// Full width...
(new Metrics\UsersPerDay)->width('full'),
];
}
Authorization
如果您只想向某些用户公开给定的 metric,您可以将 canSee
方法链接到您的 metric 注册。canSee
方法接受一个应该返回 true
或 false
的闭包。闭包将接收传入的 HTTP 请求:
use App\User;
/**
* 获取资源可用的卡片。
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function cards(Request $request)
{
return [
(new Metrics\UsersPerDay)->canSee(function ($request) {
return $request->user()->can('viewUsersPerDay', User::class);
}),
];
}
在上面的示例中,我们在 User
模型上使用 Laravel 的 Authorizable
trait 的 can
方法去决定授权用户是否被授权使用 viewUsersPerDay
操作。但是,由于代理到授权策略方法是 canSee
的常见用例,您可以使用 canSeeWhen
方法去实现相同行为。canSeeWhen
方法与 Illuminate\Foundation\Auth\Access\Authorizable
trait 的 can
方法有相同的方法签名。
use App\User;
/**
* 获取资源可用的卡片。
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function cards(Request $request)
{
return [
(new Metrics\UsersPerDay)->canSeeWhen(
'viewUsersPerDay', User::class
),
];
}