Laravel 6 - 如何记录所有 URL 的用户访问

Laravel 6 - How to Log All URL's of User Visited

我想记录该用户访问过的所有 URL。但是没有 url 我想从我的代码中记录。这是我完成的代码,请给我一些建议。感谢和感激。

网络路由

Route::get('/{url}', 'LogController@myTestAddToLog')->where('url', '[\w\d\-]+(.*)');

日志控制器

public function myTestAddToLog()
{
    \LogActivity::addToLog('My Testing Add To Log.');
}

App/Helpers LogActivity

public static function addToLog($subject)
{
    $log = [];
    $log['url'] = Request::fullUrl();
    $log['ip'] = Request::ip();
    $log['user_id'] = auth()->check() ? auth()->user()->id : 1;
    LogActivityModel::create($log);
}

您需要创建一个中间件。

php artisan make:middleware AddToLog

然后,将您的代码放入中间件中。

<?php

namespace App\Http\Middleware;

use Closure;
use App\LogActivityModel;

class AddToLog
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        if(auth()->user()) {
            LogActivityModel::create([
                'url' => request()->fullUrl(),
                'ip' => request()->ip(),
                'user_id' => auth()->id(),
            ]);
        }

        return $response;
    }
}

然后,在 app/Http/kernel.php 中,将您的中间件添加到 $middleware。这将允许任何调用的 URL 触发此代码。

protected $middleware = [
    ...
    \App\Http\Middleware\AddToLog::class,
];

请使用以下代码记录用户访问过的所有 url

Log::info(url()->full()); // For just loggin

并为存储用户日志创建 table 存储 urltimestampIP

对于那些仍然有问题的人,我根据@Adlan 提供的答案并根据他的答案的评论对答案进行了一些修改。由于您将在执行请求后记录活动,因此需要修改已接受的答案。以下是修改后的代码。

    public function handle($request, Closure $next)
{

    $response = $next($request);

    if(auth()->user()) {
        Activity::create([
            'url' => request()->fullUrl(),
            'ip_address' => request()->ip(),
            'user_id' => auth()->id(),
        ]);

    }

    return $response;

}

首先,保存下一个请求的响应。然后检查用户身份验证,最后返回响应。

参考:https://laravel.com/docs/5.8/middleware