- [资源详情 Metrics](#resource-detail-metrics)
- [仪表盘 Metrics](#dashboard-metrics)
- [Metric 大小](#metric-sizes)
- [授权](#authorization)
一旦您定义了 metric,即可将指标附加到资源。Nova 生成的每个资源都包含一个 `cards` 方法。要将 metric 附加到资源,您只需将其添加到该方法返回的 metrics/cards 的数组中:
```php
/**
* 获取资源可用的卡片。
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function cards(Request $request)
{
return [new Metrics\UsersPerDay];
}
```
## 资源详情 Metrics
除了在资源索引屏幕上放置 metrics 外,您还可以将 metric 附加到资源详细屏幕。例如,如果您构建一个播客应用程序,您可能希望显示用户在一段时间内创建的播客总数。要指示 metric 显示在详情页面而不是索引页面上,请将 `onlyOnDetail` 方法链接到您的 metric 注册:
```php
/**
* 获取可用于请求的卡片。
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function cards(Request $request)
{
return [
(new Metrics\PodcastCount)->onlyOnDetail(),
];
}
```
当然,您需要修改 metric 的查询,以仅收集当前显示资源的 metric 数据。为此,您 metric 的 `calculate` 方法可以访问传入 `$request` 的 `resourceId` 属性:
```php
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:
```php
use App\Nova\Metrics\NewUsers;
/**
* 获取应显示在 Nova 仪表板上的卡片
*
* @return array
*/
protected function cards()
{
return [
new NewUsers,
];
}
```
## Metric 大小
默认情况下,metrics 占据 Nova 内容区域的三分之一。但是,您可以自由地将他们放大。为此,请在资源注册 metric 时调用 `width` 方法:
```php
/**
* 获取可用于请求的卡。
*
* @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 请求:
```php
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` 方法有相同的方法签名。
```php
use App\User;
/**
* 获取资源可用的卡片。
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function cards(Request $request)
{
return [
(new Metrics\UsersPerDay)->canSeeWhen(
'viewUsersPerDay', User::class
),
];
}
```