andreaselia/analytics

Laravel 框架的统计分析。

v2.2.0 2024-07-30 18:58 UTC

README

Latest Stable Version

轻松收集页面浏览分析,使用简单美观的控制面板。

Laravel Analytics Dashboard

安装

安装包

composer require andreaselia/analytics

发布配置文件和资源

php artisan vendor:publish --provider="AndreasElia\Analytics\AnalyticsServiceProvider"

别忘了运行迁移

php artisan migrate

您可以将页面浏览中间件添加到特定的路由组,例如 web.php 如下所示

Route::middleware('analytics')->group(function () {
    // ...
});

或者将页面浏览添加到所有中间件/在应用程序级别上,如下所示

// app/Http/Kernel.php

protected $middleware = [
    // ...
    \AndreasElia\Analytics\Http\Middleware\Analytics::class,
];

配置

禁用跟踪

您可以通过设置环境变量 ANALYTICS_ENABLED 或配置文件中的 enabled 属性为 false 来禁用跟踪。

排除路由

您可以通过将它们添加到配置文件中的 exclude 数组来排除某些路由的跟踪。

忽略机器人

您可以通过设置配置文件中的 ignoreRobots 属性来忽略来自机器人的请求。

忽略特定 IP 地址

您可以通过将它们添加到配置文件中的 ignoreIps 数组来忽略来自特定 IP 地址的请求。

掩码路由

您可以通过将它们添加到配置文件中的 mask 数组来掩码某些路由的跟踪。如果您想跟踪具有不同参数的相同路由,例如 /users/1/users/2 将被跟踪为 /users/∗︎

忽略特定的 HTTP 动词/方法

您可以通过将它们添加到配置选项中的 analytics.ignoreMethods 来忽略某些方法的跟踪。例如,如果您不想跟踪 POST 请求,可以按如下配置

'ignoreMethods' => [
    'POST',
],

更改确定 session_id 的方式

默认情况下,page_views 表中的 session_id 被填充为当前请求的会话 ID。然而,在特定情况下(例如,对于不使用 Cookie 的 API 和其他请求),会话不可用。

在这些情况下,您可以创建一个自定义会话 ID 提供器:创建一个实现 AndreasElia\Analytics\Contracts\SessionProvider 接口的类,并将其名称设置为配置文件中的 provider 选项。配置的类对象从容器中解析,因此可以通过 __constructor 使用依赖注入。

在无 Cookie 环境中生成会话 ID 的自定义方法的一个例子是散列 IP 地址 + 用户代理 + 请求的一些其他头部。

您可以查看 AndreasElia\Analytics\RequestSessionProvider 以获取实现 SessionProvider 接口的示例。

更改确定 "今天" 和 "昨天" 的时间区域的方式

由于时间戳是使用您的应用程序的时间区域存储的,因此您可能会根据您检查 "今天" 和 "昨天" 视图的时间和您实际的时间区域得到不同的结果。您可以通过在服务提供程序中设置回调来更改 "现在" 的相对时间。

use AndreasElia\Analytics\Models\PageView;

public function boot()
{
    PageView::resolveTimezoneUsing(function () {
        return request()->user()?->timezone;
    });
}

您可以返回上述示例中的动态值,或静态值。如果没有确定,它将回退到 config('app.timezone') 的值。

Laravel Nova

该包附带 Laravel Nova 的仪表板和度量。

仪表板

您可以将仪表板添加到Laravel Nova中,通过在您的NovaServiceProvider中的dashboards数组中添加new \AndreasElia\Analytics\Nova\Dashboards\Analytics

    protected function dashboards(): array
    {
        return [
            new \AndreasElia\Analytics\Nova\Dashboards\Analytics,
        ];
    }

指标

或者,您也可以通过在仪表板文件中的cards数组中添加它们来将指标添加到您自己的Laravel Nova仪表板中。

    protected function cards(): array
    {
        return [
            new \AndreasElia\Analytics\Nova\Metrics\Devices,
            new \AndreasElia\Analytics\Nova\Metrics\PageViews,
            new \AndreasElia\Analytics\Nova\Metrics\UniqueUsers,
        ];
    }

贡献

您随时可以提交一个拉取请求,或者如果您不想这么做,可以创建一个问题,以便其他人可以继续处理。