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

use*_*010 1 logging laravel laravel-6

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

网络路由

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

日志控制器

public function myTestAddToLog()
{
    \LogActivity::addToLog('My Testing Add To Log.');
}
Run Code Online (Sandbox Code Playgroud)

应用程序/助手 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);
}
Run Code Online (Sandbox Code Playgroud)

小智 6

您需要创建一个中间件。

php artisan make:middleware AddToLog
Run Code Online (Sandbox Code Playgroud)

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

<?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)
    {
        if(auth()->user()) {
            LogActivityModel::create([
                'url' => request()->fullUrl(),
                'ip' => request()->ip(),
                'user_id' => auth()->id(),
            ]);
        }

        return $next($request);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

protected $middleware = [
    ...
    \App\Http\Middleware\AddToLog::class,
];
Run Code Online (Sandbox Code Playgroud)