注册 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 方法可以访问传入 $requestresourceId 属性:

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 方法接受一个应该返回 truefalse 的闭包。闭包将接收传入的 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
        ),
    ];
}

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/nova/1.0/regist...

译文地址:https://learnku.com/docs/nova/1.0/regist...

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~