saintsystems/nova-linkable-metrics
Composer 安装命令:
composer require saintsystems/nova-linkable-metrics
包简介
Linkable metrics for Laravel Nova 4.x.
README 文档
README
Add custom links to your Laravel Nova metrics.
Installation
You can install the package in to a Laravel app that uses Nova via composer:
composer require saintsystems/nova-linkable-metrics
Usage
To add the link ability to your Laravel Nova metric cards, you need to add the Linkable traits to your metrics.
For example, within your custom Nova value metric:
// App\Nova\Metrics\NewUsers.php use SaintSystems\Nova\LinkableMetrics\LinkableValue; class NewUsers extends Value { use LinkableValue; //...omitted for brevity
Within your custom Nova trend metric:
// App\Nova\Metrics\UsersPerDay.php use SaintSystems\Nova\LinkableMetrics\LinkableTrend; class UsersPerDay extends Trend { use LinkableTrend; //...omitted for brevity
Within your custom Nova partition metric:
// App\Nova\Metrics\UsersByStatus.php use SaintSystems\Nova\LinkableMetrics\LinkablePartition; class UsersByStatus extends Partition { use LinkablePartition; //...omitted for brevity
Defining Metric Links
You can define metric links using the route method from the Linkable trait in one of two ways:
- When the card is registered:
Index Route
// App\Nova\Dashboards\Main.php /** * Get the cards for the dashboard. * * @return array */ protected function cards() { return [ (new NewUsers)->width('1/3')->route('nova.pages.index', ['resource' => 'users']), ]; }
OR using a Lens Route
// App\Nova\Lenses\UnverifiedEmail.php class UnverifiedEmail extends Lens { //... omitted for brevity public static function query(LensRequest $request, $query) { return $request->withOrdering($request->withFilters( $query->whereNull('email_verified_at') )); } //... omitted for brevity /** * Get the URI key for the lens. * * @return string */ public function uriKey() { return 'unverified-email'; } } // App\Nova\Dashboards\Main.php /** * Get the cards for the dashboard. * * @return array */ protected function cards() { return [ (new NewUsers)->width('1/3')->route('nova.pages.lens', ['resource' => 'users', 'lens' => 'unverified-email']), ]; }
OR using a Filter Route
// App\Nova\Filters\UserStatus.php class UserStatus extends Filter { //... omitted for brevity /** * Apply the filter to the given query. * * @param \Laravel\Nova\Http\Requests\NovaRequest $request * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function apply(NovaRequest $request, $query, $value) { return $query->where('active', $value); } /** * Get the filter's available options. * * @param \Laravel\Nova\Http\Requests\NovaRequest $request * @return array */ public function options(NovaRequest $request) { return [ 'Active' => '1', 'Inactive' => '0' ]; } } // App\Nova\Dashboards\Main.php /** * Get the cards for the dashboard. * * @return array */ protected function cards() { $filter = base64_encode(json_encode([ [ 'class' => UserStatus::class, 'value' => '1', ], ])); return [ (new NewUsers)->width('1/3')->route('nova.pages.index', ['resource' => 'users', 'users_filter' => $filter]), ]; }
- Or, within the card itself (useful for cards only available on detail screens where you might want to filter the url based on the current resource):
// In your linkable Nova metric class /** * Calculate the value of the metric. * * @param \Illuminate\Http\Request $request * @return mixed */ public function calculate(Request $request, UnitOfMeasure $unitOfMeasure) { $result = $this->result($unitOfMeasure->items()->count()); $params = [ 'resource' => 'items', 'viaResource' => $request->resource, 'viaResourceId' => $unitOfMeasure->id, 'viaRelationship' => 'items', 'relationshipType' => 'hasMany', ]; return $result->route('nova.pages.index', $params); }
Customizing Partition Links
By default, Partition metrics can have links just like Value and Trend metrics. However, using the default route method like on Value and Trend metrics (as shown above) will simply link the PartitionMetric card title to the provided route/url.
For greater customization, just like Customizing Partition Labels, you may pass a Closure to the new link method on the LinkablePartitionResult class that allows you to customize the link for each individual partition in the generated chart, and even pass partition information to the route like below:
// App\Nova\Metrics\UsersByStatus use SaintSystems\Nova\LinkableMetrics\LinkablePartition; class UsersByStatus extends Partition { use LinkablePartition; /** * Calculate the value of the metric. * * @param \Laravel\Nova\Http\Requests\NovaRequest $request * @return mixed */ public function calculate(NovaRequest $request) { return $this->count($request, User::class, 'active') ->label(fn ($value) => match ($value) { 1 => 'Active', 0 => 'Inactive' }) ->link(fn ($value) => match ($value) { // 1 => null, default => route('nova.pages.index', ['resource' => 'users', 'users_filter' => base64_encode(json_encode([ [ 'class' => UserStatus::class, 'value' => $value, ], ]))], false) }); } // ... omitted for brevity
Credits
License
The MIT License (MIT). Please see License File for more information.
saintsystems/nova-linkable-metrics 适用场景与选型建议
saintsystems/nova-linkable-metrics 是一款 基于 Vue 开发的 Composer 扩展包,目前已累计 317.75k 次下载、GitHub Stars 达 21, 最近一次更新时间为 2019 年 03 月 12 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「Metrics」 「nova」 「laravel」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 saintsystems/nova-linkable-metrics 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 saintsystems/nova-linkable-metrics 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 saintsystems/nova-linkable-metrics 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A Laravel Nova card that shows you your system information.
A Laravel Nova card.
A Laravel Nova package for publishable fields
A Laravel Nova package for translatable fields
A Laravel Nova Image field. you can paste or drag or chose an image
A abstraction for generating metrics in Laravel.
统计信息
- 总下载量: 317.75k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 21
- 点击次数: 25
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2019-03-12
