一旦您定義了 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 外,您還可以將 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)
);
您不僅限于在資源的索引屏幕上顯示 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,
];
}
默認(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'),
];
}
如果您只想向某些用戶公開給定的 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
),
];
}
更多建議: