Как реализовать статистику посещений в laravel?

Пользователь

от velma , в категории: PHP , 2 года назад

Как реализовать статистику посещений в laravel?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от steve , 2 года назад

@velma 

Для реализации статистики посещений в Laravel можно использовать middleware. Middleware - это промежуточное ПО, которое может обрабатывать входящие запросы и исходящие ответы, выполняя при этом какую-то логику.


Ниже представлен пример реализации middleware для отслеживания посещений страниц:

  1. Создайте middleware командой:
1
php artisan make:middleware TrackVisits


  1. В методе handle() опишите логику отслеживания посещений и сохранения их в базе данных, например:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
public function handle($request, Closure $next)
{
    $visit = new Visit;
    $visit->url = $request->url();
    $visit->ip = $request->ip();
    $visit->user_agent = $request->header('User-Agent');
    $visit->save();

    return $next($request);
}


  1. Зарегистрируйте middleware в файле app/Http/Kernel.php, добавив его в группу middleware:
1
2
3
4
5
6
7
8
protected $middlewareGroups = [
    'web' => [
        // ...
        AppHttpMiddlewareTrackVisits::class,
    ],

    // ...
];


Теперь при каждом запросе middleware будет сохранять информацию о посещении в базе данных. Для просмотра статистики можно написать соответствующий контроллер, который будет считать количество посещений по каждой странице.

Пользователь

от eryn.rodriguez , год назад

@velma 

Для подсчета количества посещений каждой страницы можно создать контроллер с методом, который будет получать и обрабатывать данные из базы данных:


Создайте контроллер командой:

1
php artisan make:controller StatisticsController


Откройте созданный контроллер и в методе добавьте логику для получения статистики:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<?php

namespace AppHttpControllers;

use AppModelsVisit;
use IlluminateHttpRequest;

class StatisticsController extends Controller
{
    public function index()
    {
        $statistics = Visit::select('url', DB::raw('count(*) as total_visits'))
            ->groupBy('url')
            ->orderByDesc('total_visits')
            ->get();

        return view('statistics.index', compact('statistics'));
    }
}


В данном примере используется модель Visit, которая представляет таблицу в базе данных, где хранятся данные о посещениях. Выполняется запрос к базе данных для выборки URL и подсчета количества посещений для каждой страницы. Полученные данные передаются в представление statistics.index.


Создайте представление statistics/index.blade.php, где будет отображаться статистика:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
@extends('layouts.app')

@section('content')
    <h1>Статистика посещений</h1>

    <table>
        <thead>
            <tr>
                <th>URL</th>
                <th>Количество посещений</th>
            </tr>
        </thead>
        <tbody>
            @foreach($statistics as $item)
                <tr>
                    <td>{{ $item->url }}</td>
                    <td>{{ $item->total_visits }}</td>
                </tr>
            @endforeach
        </tbody>
    </table>
@endsection


Теперь, чтобы увидеть статистику, нужно создать маршрут для этого контроллера. Откройте файл routes/web.php и добавьте маршрут:

1
Route::get('/statistics', [StatisticsController::class, 'index']);


После этого при переходе по маршруту /statistics будет вызываться метод index контроллера StatisticsController, который будет отображать статистику посещений.


Обратите внимание, что код приведен в качестве примера и может потребовать доработки в зависимости от вашей конкретной реализации и требований.