Theo dõi số lượng truy cập vào ứng dụng Laravel
Bài đăng này đã không được cập nhật trong 6 năm
Mình xin giới thiệu một package khá hay, Laravel Visits là một package giúp bạn theo dõi số lượng truy cập vào ứng dụng, bao gồm một số chức năng:
- Một Model có thể được theo dõi lượt truy cập theo nhiều kiểu (sử dụng tag)
- Có thể sử dụng với mọi Model (một số package chỉ cho phép model User)
- Ghi lại theo khách truy cập bằng cách sử dụng IP người dùng, tránh việc ghi trùng lặp nếu người đó đã xem rồi
- Get Model có lượt visit nhiều nhất/ít nhất
- Get quốc gia có lượt visit nhiều nhất
- Get visit theo từng giai đoạn như theo tháng hay năm của từng Model
Cài đặt
composer require awssat/laravel-visits
Nếu bạn đang sử dụng phiên bản Laravel < 5.5 thì nhớ đăng ký awssat\Visits\VisitsServiceProvider::class
vào config/app.php
, Laravel 5.5+ thì không cần.
Publish file config của package sử dụng command:
php artisan vendor:publish --provider="awssat\Visits\VisitsServiceProvider"
Package này sử dụng redis để lưu dữ liệu. Mặc định package không sử dụng cấu hình redis mặc định của Laravel, tạo mới một connection khác trong config/database.php
để sử dụng cho laravel-visits
phòng tránh việc mất mát dữ liệu:
'laravel-visits' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 3, // anything from 1 to 15, except 0 (or what is set in default)
],
Và thay đổi redis connection trong config/visits.php
:
'connection' => 'laravel-visits'
Sử dụng
Rất đơn giản sử dụng helper visits
:
visits($model)->{method}()
Trong đó:
$model
: là Eloquent model bất kỳ trong project của bạn{method}
: là method bất kỳ được hổ trợ bởi 'laravel-visits', sẽ được giới thiệu dưới đây
Tags: Bạn có thể theo dõi nhiều kiểu truy cập của cùng một model bằng cách sử dụng tag:
visits($model, 'tag1')->increment()
Increments và Decrements
Tăng 1 lượt truy cập:
visits($post)->increment();
Tăng nhiều hơn 1:
visits($post)->increment(10);
Giảm 1 lượt truy cập:
visits($post)->decrement();
Giảm nhiều hơn 1:
visits($post)->decrement(10);
Chỉ tăng hoặc giảm lượt truy cập mỗi x giây (dựa vào IP người truy cập)
visits($post)->seconds(30)->increment()
- Việc này sẽ ghi đè cấu hình mặc định của package (mỗi 15phút 1 lần cho 1 IP)
Force increment/decrement:
visits($post)->forceIncrement();
visits($post)->forceDecrement();
Việc này sẽ tăng hoặc giảm ngay lập tức mà ko cần kiểm tra IP.
Getting data
Đếm tất cả lượt truy cập của $post
:
$post = Post::find(1);
visits($post)->count();
Đếm số lượt truy cập theo chu kỳ:
$post = Post::find(1);
visits($post)->period('day')->count();
Đếm lượt truy cập theo Model class
Tất cả lượt truy cập của 1 Model:
// Đếm lượt truy cập vào tất cả các post
visits('App\Post')->count()
Theo chu kỳ:
visits('App\Post')->period('day')->count()
Quốc gia của khách truy cập
visits($post)->countries()
Nguồn của khách truy cập
visits($post)->refs()
Top 10 post được truy cập nhiều nhất
visits('App\Post')->top(10)
Hoặc ít nhất:
visits('App\Post')->low(10)
Lấy dữ liệu mới nhất (không cache)
visits('App\Post')->fresh()->top(10)
Cũng có thể luôn lấy dữ liệu mới nhất (không cache) bằng cách setting 'always_fresh' => true
trong file config.
Lấy dữ liệu theo chu kỳ
visits('App\Post')->period('month')->top(10)
Reset và xóa dữ liệu
Xóa lượt truy cập của 1 post:
visits($post)->reset();
Xóa theo chu kỳ:
visits($post)->period('year')->reset()
Xóa dữ liệu theo IP:
visits($post)->reset('ips');
visits($post)->reset('ips', '127.0.0.1');
Ngoài ra:
// Xóa lượt truy cập của Model
visits('App\Post')->reset();
// XÓa cache của list thấp nhất/cao nhất của Model
visits('App\Post')->reset('lists');
// Xóa dữ liệu theo chu kỳ của Mode
visits('App\Post')->period('year')->reset()
//...?
visits('App\Post')->reset('factory')
Tích hợp vào Eloquent
Chúng ta có thể thêm một method visits
vào trong model class:
public function visits()
{
return visits($this);
}
Và sau đó sử dụng, tiện hơn:
$post = Post::find(1);
$post->visits()->increment();
$post->visits()->count();
Một package khá tiện cho việc theo dõi số lượt truy cập trong Laravel phải không nào. Happy coding!
Tham khảo:
All rights reserved