Laravel Nova 注冊(cè) Metrics

2023-02-16 17:09 更新

一旦您定義了 metric,即可將指標(biāo)附加到資源。Nova 生成的每個(gè)資源都包含一個(gè) cards 方法。要將 metric 附加到資源,您只需將其添加到該方法返回的 metrics/cards 的數(shù)組中:

/**
 * 獲取資源可用的卡片。
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function cards(Request $request)
{
    return [new Metrics\UsersPerDay];
}

資源詳情 Metrics

除了在資源索引屏幕上放置 metrics 外,您還可以將 metric 附加到資源詳細(xì)屏幕。例如,如果您構(gòu)建一個(gè)播客應(yīng)用程序,您可能希望顯示用戶在一段時(shí)間內(nèi)創(chuàng)建的播客總數(shù)。要指示 metric 顯示在詳情頁(yè)面而不是索引頁(yè)面上,請(qǐng)將 onlyOnDetail 方法鏈接到您的 metric 注冊(cè):

/**
 * 獲取可用于請(qǐng)求的卡片。
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function cards(Request $request)
{
    return [
        (new Metrics\PodcastCount)->onlyOnDetail(),
    ];
}

當(dāng)然,您需要修改 metric 的查詢,以僅收集當(dāng)前顯示資源的 metric 數(shù)據(jù)。為此,您 metric 的 calculate 方法可以訪問傳入 $request 的 resourceId 屬性:

use App\Podcast;

return $this->count(
    $request,
    Podcast::where('user_id', $request->resourceId)
);

Dashboard Metrics

您不僅限于在資源的索引屏幕上顯示 metrics。您可以自由地向「儀表盤」 添加 metrics,這是 Nova 登錄后顯示的默認(rèn)頁(yè)面。默認(rèn)情況下,此屏幕通過內(nèi)置的 Help 卡片顯示指向 Nova 文檔的一些有用鏈接。要向儀表盤添加 metric,在 app/Providers/NovaServiceProvider 類的 cards 方法返回的數(shù)組中添加 metric:

use App\Nova\Metrics\NewUsers;

/**
 * 獲取應(yīng)顯示在 Nova 儀表板上的卡片
 *
 * @return array
 */
protected function cards()
{
    return [
        new NewUsers,
    ];
}

Metric 大小

默認(rèn)情況下,metrics 占據(jù) Nova 內(nèi)容區(qū)域的三分之一。但是,您可以自由地將他們放大。為此,請(qǐng)?jiān)谫Y源注冊(cè) metric 時(shí)調(diào)用 width 方法:

/**
 * 獲取可用于請(qǐng)求的卡。
 *
 * @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 注冊(cè)。canSee 方法接受一個(gè)應(yīng)該返回 true 或 false 的閉包。閉包將接收傳入的 HTTP 請(qǐng)求:

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);
        }),
    ];
}

在上面的示例中,我們?cè)?nbsp;User 模型上使用 Laravel 的 Authorizable trait 的 can 方法去決定授權(quán)用戶是否被授權(quán)使用 viewUsersPerDay 操作。但是,由于代理到授權(quán)策略方法是 canSee 的常見用例,您可以使用 canSeeWhen 方法去實(shí)現(xiàn)相同行為。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
        ),
    ];
}


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)