介绍
Laravel Pulse (opens in a new tab) 为您的应用程序的性能和使用情况提供一目了然的见解。通过 Pulse,您可以追踪诸如缓慢的任务和端点等瓶颈,找到最活跃的用户等等。
对于单个事件的深入调试,请查看 Laravel Telescope 。
安装
[!警告]
Pulse 的第一方存储实现目前需要 MySQL、MariaDB 或 PostgreSQL 数据库。如果您使用的是其他数据库引擎,则需要为 Pulse 数据单独使用 MySQL、MariaDB 或 PostgreSQL 数据库。
您可以使用 Composer 包管理器安装 Pulse:
composer require laravel/pulse
接下来,您应该使用 vendor:publish
Artisan 命令发布 Pulse 配置和迁移文件:
php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"
最后,您应该运行 migrate
命令来创建存储 Pulse 数据所需的表:
php artisan migrate
一旦运行了 Pulse 的数据库迁移,您可以通过 /pulse
路由访问 Pulse 仪表盘。
[!注意]
如果您不想将 Pulse 数据存储在应用程序的主数据库中,您可以 指定一个专用的数据库连接 。
配置
Pulse 的许多配置选项可以使用环境变量进行控制。要查看可用选项、注册新的记录器或配置高级选项,您可以发布 config/pulse.php
配置文件:
php artisan vendor:publish --tag=pulse-config
仪表盘
授权
可以通过 /pulse
路由访问 Pulse 仪表盘。默认情况下,您只能在 local
环境中访问此仪表盘,因此您需要通过自定义 'viewPulse'
授权门来为您的生产环境配置授权。您可以在应用程序的 app/Providers/AppServiceProvider.php
文件中完成此操作:
use App\Models\User;
use Illuminate\Support\Facades\Gate;
/**
* 引导任何应用程序服务。
*/
public function boot(): void
{
Gate::define('viewPulse', function (User $user) {
return $user->isAdmin();
});
//...
}
自定义
可以通过发布仪表盘视图来配置 Pulse 仪表盘卡片和布局。仪表盘视图将发布到 resources/views/vendor/pulse/dashboard.blade.php
:
php artisan vendor:publish --tag=pulse-dashboard
该仪表盘由 Livewire (opens in a new tab) 提供支持,允许您自定义卡片和布局,而无需重新构建任何 JavaScript 资产。
在该文件中,<x-pulse>
组件负责渲染仪表盘,并为卡片提供网格布局。如果您希望仪表盘占据整个屏幕宽度,可以向组件提供 full-width
属性:
<x-pulse full-width>
...
</x-pulse>
默认情况下,<x-pulse>
组件将创建一个 12 列的网格,但您可以使用 cols
属性进行自定义:
<x-pulse cols="16">
...
</x-pulse>
每个卡片都接受 cols
和 rows
属性来控制空间和位置:
<livewire:pulse.usage cols="4" rows="2" />
大多数卡片还接受 expand
属性以显示完整的卡片而不是滚动:
<livewire:pulse.slow-queries expand />
解决用户问题
对于显示有关您的用户信息的卡片,例如应用程序使用情况卡片,Pulse 只会记录用户的 ID。在渲染仪表盘时,Pulse 将从您的默认 Authenticatable
模型中解析 name
和 email
字段,并使用 Gravatar 网络服务显示头像。
您可以通过在应用程序的 App\Providers\AppServiceProvider
类中调用 Pulse::user
方法来自定义字段和头像。
user
方法接受一个闭包,该闭包将接收要显示的 Authenticatable
模型,并应返回一个包含用户的 name
、 extra
和 avatar
信息的数组:
use Laravel\Pulse\Facades\Pulse;
/**
* 引导任何应用程序服务。
*/
public function boot(): void
{
Pulse::user(fn ($user) => [
'name' => $user->name,
'extra' => $user->email,
'avatar' => $user->avatar_url,
]);
//...
}
[!注意]
您可以通过实现Laravel\Pulse\Contracts\ResolvesUsers
契约并将其绑定在 Laravel 的 服务容器 中,完全自定义如何捕获和检索经过身份验证的用户。
卡片
服务器
<livewire:pulse.servers />
卡片显示运行 pulse:check
命令的所有服务器的系统资源使用情况。有关系统资源报告的更多信息,请参考关于 服务器记录器 的文档。
如果您在基础设施中替换了服务器,您可能希望在给定的持续时间后停止在 Pulse 仪表盘中显示不活动的服务器。您可以使用 ignore-after
属性来实现此目的,该属性接受以秒为单位的时间,在此时间后,不活动的服务器应从 Pulse 仪表盘中删除。或者,您可以提供一个相对时间格式的字符串,例如 1 小时
或 3 天 1 小时
:
<livewire:pulse.servers ignore-after="3 小时" />
应用程序使用情况
<livewire:pulse.usage />
卡片显示向您的应用程序发出请求、调度任务以及遇到缓慢请求的前 10 位用户。
如果您希望同时在屏幕上查看所有使用指标,可以多次包含该卡片并指定 type
属性:
<livewire:pulse.usage type="requests" />
<livewire:pulse.usage type="slow_requests" />
<livewire:pulse.usage type="jobs" />
要了解如何自定义 Pulse 如何检索和显示用户信息,请查阅我们关于 解决用户问题 的文档。
[!注意]
如果您的应用程序收到大量请求或调度大量任务,您可能希望启用 采样 。有关更多信息,请参阅 用户请求记录器 、 用户任务记录器 和 缓慢任务记录器 的文档。
异常
<livewire:pulse.exceptions />
卡片显示您的应用程序中发生的异常的频率和最近发生时间。默认情况下,异常根据异常类和发生的位置进行分组。有关更多信息,请参阅 异常记录器 的文档。
队列
<livewire:pulse.queues />
卡片显示您的应用程序中队列的吞吐量,包括排队、处理中、已处理、已释放和失败的任务数量。有关更多信息,请参阅 队列记录器 的文档。
缓慢请求
<livewire:pulse.slow-requests />
卡片显示您的应用程序中超过配置阈值(默认值为 1000 毫秒)的传入请求。有关更多信息,请参阅 缓慢请求记录器 的文档。
缓慢任务
<livewire:pulse.slow-jobs />
卡片显示您的应用程序中超过配置阈值(默认值为 1000 毫秒)的排队任务。有关更多信息,请参阅 缓慢任务记录器 的文档。
缓慢查询
<livewire:pulse.slow-queries />
卡片显示您的应用程序中超过配置阈值(默认值为 1000 毫秒)的数据库查询。
默认情况下,缓慢查询根据 SQL 查询(无绑定)和发生的位置进行分组,但如果您希望仅根据 SQL 查询进行分组,则可以选择不捕获位置。
如果由于接收语法突出显示的极其大的 SQL 查询而遇到渲染性能问题,您可以通过添加 without-highlighting
属性来禁用突出显示:
<livewire:pulse.slow-queries without-highlighting />
有关更多信息,请参阅 缓慢查询记录器 的文档。
缓慢的外出请求
<livewire:pulse.slow-outgoing-requests />
卡片显示使用 Laravel 的 HTTP 客户端 发出的超过配置阈值(默认值为 1000 毫秒)的外出请求。
默认情况下,条目将根据完整的 URL 进行分组。但是,您可能希望使用正则表达式对类似的外出请求进行规范化或分组。有关更多信息,请参阅 缓慢外出请求记录器 的文档。
缓存
<livewire:pulse.cache />
卡片显示您的应用程序的缓存命中和未命中统计信息,包括全局和各个键的统计信息。
默认情况下,条目将根据键进行分组。但是,您可能希望使用正则表达式对类似的键进行规范化或分组。有关更多信息,请参阅 缓存交互记录器 的文档。
捕获条目
大多数 Pulse 记录器将根据 Laravel 调度的框架事件自动捕获条目。但是,服务器记录器 和一些第三方卡片必须定期轮询以获取信息。要使用这些卡片,您必须在所有单独的应用程序服务器上运行 pulse:check
守护进程:
php artisan pulse:check
[!注意]
为了使pulse:check
进程在后台永久运行,您应该使用诸如 Supervisor 之类的进程监视器来确保该命令不会停止运行。
由于 pulse:check
命令是一个长期运行的进程,如果不重新启动,它将不会看到您的代码库的更改。您应该在应用程序的部署过程中通过调用 pulse:restart
命令来优雅地重新启动该命令:
php artisan pulse:restart
[!注意]
Pulse 使用 缓存 来存储重新启动信号,因此在使用此功能之前,您应该验证您的应用程序是否正确配置了缓存驱动程序。
记录器
记录器负责捕获应用程序中的条目,以便将其记录在 Pulse 数据库中。记录器在 Pulse 配置文件的 recorders
部分进行注册和配置。
缓存交互
CacheInteractions
记录器会捕获有关应用程序中发生的 缓存命中和未命中的信息,以便在 缓存 卡片上显示。
您可以选择调整 采样率 和忽略的键模式。
您还可以配置键分组,以便将相似的键作为一个条目进行分组。例如,您可能希望从缓存相同类型信息的键中删除唯一 ID。使用正则表达式来“查找并替换”键的部分来配置组。配置文件中包含了一个示例:
Recorders\CacheInteractions::class => [
//...
'groups' => [
// '/:\d+/' => ':*',
],
],
将使用第一个匹配的模式。如果没有模式匹配,则将按原样捕获键。
异常
Exceptions
记录器会捕获有关应用程序中发生的可报告异常的信息,以便在 异常 卡片上显示。
您可以选择调整 采样率 和忽略的异常模式。您还可以配置是否捕获异常的起源位置。捕获的位置将显示在 Pulse 仪表板上,这有助于追踪异常的起源;但是,如果相同的异常在多个位置发生,则每个唯一位置都会出现多次。
队列
Queues
记录器会捕获有关应用程序队列的信息,以便在 队列 上显示。
您可以选择调整 采样率 和忽略的作业模式。
缓慢作业
SlowJobs
记录器会捕获有关应用程序中发生的缓慢作业的信息,以便在 缓慢作业 卡片上显示。
您可以选择调整缓慢作业阈值、采样率 和忽略的作业模式。
您可能有一些作业预计会比其他作业花费更长的时间。在这种情况下,您可以为每个作业配置阈值:
Recorders\SlowJobs::class => [
//...
'threshold' => [
'#^App\\Jobs\\GenerateYearlyReports$#' => 5000,
'default' => env('PULSE_SLOW_JOBS_THRESHOLD', 1000),
],
],
如果没有正则表达式模式与作业的类名匹配,则将使用 'default'
值。
缓慢的出站请求
SlowOutgoingRequests
记录器会捕获使用 Laravel 的 HTTP 客户端 发出的超过配置阈值的出站 HTTP 请求的信息,以便在 缓慢的出站请求 卡片上显示。
您可以选择调整缓慢的出站请求阈值、采样率 和忽略的 URL 模式。
您可能有一些出站请求预计会比其他请求花费更长的时间。在这种情况下,您可以为每个请求配置阈值:
Recorders\SlowOutgoingRequests::class => [
//...
'threshold' => [
'#backup.zip$#' => 5000,
'default' => env('PULSE_SLOW_OUTGOING_REQUESTS_THRESHOLD', 1000),
],
],
如果没有正则表达式模式与请求的 URL 匹配,则将使用 'default'
值。
您还可以配置 URL 分组,以便将相似的 URL 作为一个条目进行分组。例如,您可能希望从 URL 路径中删除唯一 ID 或仅按域名进行分组。使用正则表达式来“查找并替换”URL 的部分来配置组。配置文件中包含了一些示例:
Recorders\SlowOutgoingRequests::class => [
//...
'groups' => [
// '#^https://api\.github\.com/repos/.*$#' => 'api.github.com/repos/*',
// '#^https?://([^/]*).*$#' => '\1',
// '#/\d+#' => '/*',
],
],
将使用第一个匹配的模式。如果没有模式匹配,则将按原样捕获 URL。
缓慢查询
SlowQueries
记录器会捕获应用程序中超过配置阈值的任何数据库查询,以便在 缓慢查询 卡片上显示。
您可以选择调整缓慢查询阈值、采样率 和忽略的查询模式。您还可以配置是否捕获查询位置。捕获的位置将显示在 Pulse 仪表板上,这有助于追踪查询的起源;但是,如果在多个位置进行了相同的查询,则每个唯一位置都会出现多次。
您可能有一些查询预计会比其他查询花费更长的时间。在这种情况下,您可以为每个查询配置阈值:
Recorders\SlowQueries::class => [
//...
'threshold' => [
'#^insert into `yearly_reports`#' => 5000,
'default' => env('PULSE_SLOW_QUERIES_THRESHOLD', 1000),
],
],
如果没有正则表达式模式与查询的 SQL 匹配,则将使用 'default'
值。
缓慢请求
Requests
记录器会捕获有关向应用程序发出的请求的信息,以便在 缓慢请求 和 应用程序使用情况 卡片上显示。
您可以选择调整缓慢路由阈值、采样率 和忽略的路径。
您可能有一些请求预计会比其他请求花费更长的时间。在这种情况下,您可以为每个请求配置阈值:
Recorders\SlowRequests::class => [
//...
'threshold' => [
'#^/admin/#' => 5000,
'default' => env('PULSE_SLOW_REQUESTS_THRESHOLD', 1000),
],
],
如果没有正则表达式模式与请求的 URL 匹配,则将使用 'default'
值。
服务器
Servers
记录器会捕获为您的应用程序提供动力的服务器的 CPU、内存和存储使用情况,以便在 服务器 卡片上显示。此记录器需要在您希望监控的每个服务器上运行 pulse:check
命令。
每个报告服务器必须具有唯一的名称。默认情况下,Pulse 将使用 PHP 的 gethostname
函数返回的值。如果您希望自定义此名称,可以设置 PULSE_SERVER_NAME
环境变量:
PULSE_SERVER_NAME=load-balancer
Pulse 配置文件还允许您自定义要监控的目录。
用户作业
UserJobs
记录器会捕获有关在您的应用程序中调度作业的用户的信息,以便在 应用程序使用情况 卡片上显示。
您可以选择调整 采样率 和忽略的作业模式。
用户请求
UserRequests
记录器会捕获有关向您的应用程序发出请求的用户的信息,以便在 应用程序使用情况 卡片上显示。
您可以选择调整 采样率 和忽略的作业模式。
过滤
正如我们所看到的,许多 记录器 通过配置提供了根据其值(例如请求的 URL)“忽略”传入条目的能力。但是,有时根据其他因素(例如当前经过身份验证的用户)过滤掉记录可能会很有用。要过滤掉这些记录,您可以向 Pulse 的 filter
方法传递一个闭包。通常,filter
方法应在应用程序的 AppServiceProvider
的 boot
方法中调用:
use Illuminate\Support\Facades\Auth;
use Laravel\Pulse\Entry;
use Laravel\Pulse\Facades\Pulse;
use Laravel\Pulse\Value;
/**
* 引导任何应用程序服务。
*/
public function boot(): void
{
Pulse::filter(function (Entry|Value $entry) {
return Auth::user()->isNotAdmin();
});
//...
}
性能
Pulse 的设计目的是可以在现有的应用程序中使用,而无需任何额外的基础设施。然而,对于高流量的应用程序,有几种方法可以消除 Pulse 对您的应用程序性能可能产生的任何影响。
使用不同的数据库
对于高流量的应用程序,您可能更愿意为 Pulse 使用专用的数据库连接,以避免影响您的应用程序数据库。
您可以通过设置 PULSE_DB_CONNECTION
环境变量来自定义 Pulse 使用的 数据库连接。
PULSE_DB_CONNECTION=pulse
Redis 摄取
[!警告]
Redis 摄取需要 Redis 6.2 或更高版本,并且应用程序配置的 Redis 客户端驱动程序为phpredis
或predis
。
默认情况下,Pulse 会在将 HTTP 响应发送到客户端或处理作业后,直接将条目存储到 配置的数据库连接 中;但是,您可以使用 Pulse 的 Redis 摄取驱动程序将条目发送到 Redis 流中。可以通过配置 PULSE_INGEST_DRIVER
环境变量来启用此功能:
PULSE_INGEST_DRIVER=redis
默认情况下,Pulse 将使用您的默认 Redis 连接,但您可以通过 PULSE_REDIS_CONNECTION
环境变量进行自定义:
PULSE_REDIS_CONNECTION=pulse
使用 Redis 摄取时,您需要运行 pulse:work
命令来监控流并将条目从 Redis 移动到 Pulse 的数据库表中。
php artisan pulse:work
[!注意]
为了使pulse:work
进程在后台永久运行,您应该使用诸如 Supervisor 之类的进程监视器来确保 Pulse 工作进程不会停止运行。
由于 pulse:work
命令是一个长期运行的进程,如果不重新启动,它将不会看到您的代码库的更改。在应用程序的部署过程中,您应该通过调用 pulse:restart
命令来优雅地重新启动该命令:
php artisan pulse:restart
[!注意]
Pulse 使用 缓存 来存储重启信号,因此在使用此功能之前,您应该验证您的应用程序是否正确配置了缓存驱动程序。
采样
默认情况下,Pulse 会捕获应用程序中发生的每个相关事件。对于高流量应用程序,这可能导致在仪表板中需要聚合数百万个数据库行,特别是对于较长的时间段。
您可以选择在某些 Pulse 数据记录器上启用“采样”。例如,在 用户请求
记录器上将采样率设置为 0.1
,这意味着您只会记录大约 10%的应用程序请求。在仪表板中,这些值将按比例放大,并以 ~
为前缀,表示它们是近似值。
一般来说,对于特定指标的条目越多,您可以安全地设置越低的采样率,而不会牺牲太多准确性。
修剪
一旦 Pulse 存储的条目超出仪表板窗口范围,Pulse 将自动修剪这些条目。在使用抽奖系统摄取数据时会进行修剪,该系统可以在 Pulse 配置文件 中进行自定义。
处理 Pulse 异常
如果在捕获 Pulse 数据时发生异常,例如无法连接到存储数据库,Pulse 将默默失败,以避免影响您的应用程序。
如果您希望自定义如何处理这些异常,可以为 handleExceptionsUsing
方法提供一个闭包:
use Laravel\Pulse\Facades\Pulse;
use Illuminate\Support\Facades\Log;
Pulse::handleExceptionsUsing(function ($e) {
Log::debug('Pulse 中发生异常', [
'message' => $e->getMessage(),
'stack' => $e->getTraceAsString(),
]);
});
自定义卡片
Pulse 允许您构建自定义卡片以显示与您的应用程序特定需求相关的数据。Pulse 使用 Livewire (opens in a new tab),因此在构建您的第一个自定义卡片之前,您可能想要 查看其文档 (opens in a new tab)。
卡片组件
在 Laravel Pulse 中创建自定义卡片首先要扩展基本的 Card
Livewire 组件并定义相应的视图:
namespace App\Livewire\Pulse;
use Laravel\Pulse\Livewire\Card;
use Livewire\Attributes\Lazy;
#[Lazy]
class TopSellers extends Card
{
public function render()
{
return view('livewire.pulse.top-sellers');
}
}
当使用 Livewire 的 懒加载 (opens in a new tab) 功能时,Card
组件将自动提供一个占位符,该占位符会尊重传递给您的组件的 cols
和 rows
属性。
在编写 Pulse 卡片的相应视图时,您可以利用 Pulse 的 Blade 组件来实现一致的外观和感觉:
<x-pulse::card :cols="$cols" :rows="$rows" :class="$class" wire:poll.5s="">
<x-pulse::card-header name="顶级卖家">
<x-slot:icon>
...
</x-slot:icon>
</x-pulse::card-header>
<x-pulse::scroll :expand="$expand">
...
</x-pulse::scroll>
</x-pulse::card>
$cols
、$rows
、$class
和 $expand
变量应传递给它们各自的 Blade 组件,以便可以从仪表板视图中自定义卡片布局。您可能还希望在视图中包含 wire:poll.5s=""
属性,以使卡片自动更新。
一旦您定义了 Livewire 组件和模板,该卡片就可以包含在您的 仪表板视图 中:
<x-pulse>
...
<livewire:pulse.top-sellers cols="4" />
</x-pulse>
[!注意]
如果您的卡片包含在一个包中,您需要使用Livewire::component
方法将该组件与 Livewire 进行注册。
样式
如果您的卡片需要超出 Pulse 所包含的类和组件的额外样式,有几种选项可以为您的卡片包含自定义 CSS。
Laravel Vite 集成
如果您的自定义卡片位于您的应用程序代码库中,并且您正在使用 Laravel 的 Vite 集成,您可以更新您的 vite.config.js
文件,为您的卡片包含一个专用的 CSS 入口点:
laravel({
input: [
'resources/css/pulse/top-sellers.css',
//...
],
}),
然后,您可以在您的 仪表板视图 中使用 @vite
Blade 指令,指定您的卡片的 CSS 入口点:
<x-pulse>
@vite('resources/css/pulse/top-sellers.css')
...
</x-pulse>
CSS 文件
对于其他用例,包括包含在包中的 Pulse 卡片,您可以通过在您的 Livewire 组件上定义一个 css
方法来指示 Pulse 加载其他样式表,该方法返回您的 CSS 文件的文件路径:
class TopSellers extends Card
{
//...
protected function css()
{
return __DIR__.'/../../dist/top-sellers.css';
}
}
当此卡片包含在仪表板上时,Pulse 将自动在 <style>
标签中包含此文件的内容,因此它不需要发布到 public
目录。
Tailwind CSS
当使用 Tailwind CSS 时,您应该创建一个专用的 Tailwind 配置文件,以避免加载不必要的 CSS 或与 Pulse 的 Tailwind 类冲突:
export default {
darkMode: 'class',
important: '#top-sellers',
content: [
'./resources/views/livewire/pulse/top-sellers.blade.php',
],
corePlugins: {
preflight: false,
},
};
然后,您可以在您的 CSS 入口点中指定配置文件:
@config "../../tailwind.top-sellers.config.js";
@tailwind base;
@tailwind components;
@tailwind utilities;
您还需要在您的卡片视图中包含一个 id
或 class
属性,该属性与传递给 Tailwind 的 重要选择器策略
(opens in a new tab) 的选择器相匹配:
<x-pulse::card id="top-sellers" :cols="$cols" :rows="$rows" class="$class">
...
</x-pulse::card>
数据捕获和聚合
自定义卡片可以从任何地方获取和显示数据;然而,您可能希望利用 Pulse 强大而高效的数据记录和聚合系统。
捕获条目
Pulse 允许您使用 Pulse::record
方法记录“条目”:
use Laravel\Pulse\Facades\Pulse;
Pulse::record('用户销售', $user->id, $sale->amount)
->sum()
->count();
提供给 record
方法的第一个参数是您正在记录的条目的“类型”,而第二个参数是确定如何对聚合数据进行分组的“键”。对于大多数聚合方法,您还需要指定要聚合的“值”。在上面的示例中,要聚合的值是 $sale->amount
。然后,您可以调用一个或多个聚合方法(例如 sum
),以便 Pulse 可以将预聚合值捕获到“桶”中,以便以后进行高效检索。
可用的聚合方法有:
avg
count
max
min
sum
[!注意]
当构建一个捕获当前认证用户 ID 的卡片包时,您应该使用Pulse::resolveAuthenticatedUserId()
方法,该方法尊重对应用程序进行的任何 用户解析器自定义。
检索聚合数据
当扩展 Pulse 的 Card
Livewire 组件时,您可以使用 aggregate
方法检索仪表板中正在查看的时间段的聚合数据:
class TopSellers extends Card
{
public function render()
{
return view('livewire.pulse.top-sellers', [
'顶级卖家' => $this->aggregate('用户销售', ['sum', 'count'])
]);
}
}
aggregate
方法返回一个 PHP stdClass
对象的集合。每个对象将包含之前捕获的 key
属性,以及每个请求的聚合的键:
@foreach ($顶级卖家 as $卖家)
{{ $卖家->key }}
{{ $卖家->sum }}
{{ $卖家->count }}
@endforeach
Pulse 主要从预聚合的桶中检索数据;因此,指定的聚合必须使用 Pulse::record
方法预先捕获。最旧的桶通常会部分超出该时间段,因此 Pulse 会聚合最旧的条目以填补差距,并为整个时间段提供准确的值,而无需在每个轮询请求中聚合整个时间段。
您还可以通过使用 aggregateTotal
方法检索给定类型的总值。例如,以下方法将检索所有用户销售的总和,而不是按用户进行分组。
$总和 = $this->aggregateTotal('用户销售', 'sum');
显示用户
当处理将用户 ID 作为键记录的聚合时,您可以使用 Pulse::resolveUsers
方法将键解析为用户记录:
$聚合 = $this->aggregate('用户销售', ['sum', 'count']);
$用户 = Pulse::resolveUsers($聚合->pluck('key'));
return view('livewire.pulse.top-sellers', [
'卖家' => $聚合->map(fn ($聚合) => (object) [
'用户' => $用户->find($聚合->key),
'总和' => $聚合->sum,
'计数' => $聚合->count,
])
]);
find
方法返回一个包含 name
、extra
和 avatar
键的对象,您可以选择将其直接传递给 <x-pulse::user-card>
Blade 组件:
<x-pulse::user-card :user="{{ $卖家->用户 }}" :stats="{{ $卖家->总和 }}" />
自定义记录器
包作者可能希望提供记录器类,以允许用户配置数据的捕获。
记录器在应用程序的 config/pulse.php
配置文件的 recorders
部分中注册:
[
//...
'recorders' => [
Acme\Recorders\Deployments::class => [
//...
],
//...
],
]
记录器可以通过指定 $listen
属性来监听事件。Pulse 将自动注册监听器并调用记录器的 record
方法:
<?php
namespace Acme\Recorders;
use Acme\Events\Deployment;
use Illuminate\Support\Facades\Config;
use Laravel\Pulse\Facades\Pulse;
class Deployments
{
/**
* 要监听的事件。
*
* @var array<int, class-string>
*/
public array $listen = [
Deployment::class,
];
/**
* 记录部署。
*/
public function record(Deployment $event): void
{
$配置 = Config::get('pulse.recorders.'.static::class);
Pulse::record(
//...
);
}
}