Laravel 6 - Как зарегистрировать все URL посещенных пользователем - PullRequest
0 голосов
/ 20 января 2020

Я хочу зарегистрировать все URL, которые посетил пользователь. Но я не хочу указывать в своем коде URL-адрес. Вот код, который я сделал, пожалуйста, дайте мне несколько советов. Спасибо и ценим.

Веб-маршруты

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

Log Controller

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

Приложение / помощники 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);
}

Ответы [ 3 ]

3 голосов
/ 20 января 2020

Вам необходимо создать промежуточное ПО.

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

        return $next($request);
    }
}

Затем, внутри app/Http/kernel.php, добавьте свое промежуточное ПО в $middleware. Это позволит любому вызываемому URL вызвать этот код.

protected $middleware = [
    ...
    \App\Http\Middleware\AddToLog::class,
];
0 голосов
/ 14 февраля 2020

Для тех, у кого все еще есть проблема, я немного изменил ответ, предоставленный @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

{ ссылка }

0 голосов
/ 20 января 2020

Пожалуйста, используйте приведенный ниже код для регистрации всех URL, которые посетил пользователь

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

. Для хранения журнала пользователя создайте таблицу хранения url с меткой времени и IP

...