Пример создания журнала активности пользователей в Laravel
В этом руководстве мы рассмотрим создание собственного журнала для регистрации активности пользователей – вместо использования пакета User Activity. Пример, который будет рассмотрен, подходит для Laravel версий 6,7 и 8. Я разработал таблицу и фасад помощника для отслеживания действий пользователей – вы можете изменить структуру сводной таблицы и метод помощника, как вам нравится.
Мой пример очень прост, образцы кода помогут вам разобраться в логике метода, и установка дополнительных пакетов не понадобится. В отчетную таблицу входят следующие поля:
| ID | Номер |
| Subject | Действие |
| URL | Где на сайте были сделаны изменения |
| Method | Метод создания (изменения) записи |
| IP | IP-адрес пользователя |
| Agent | Браузер, операционная система пользователя |
| user_id | Идентификатор |
| created_at | Дата и время создания записи |
| updated_at | Время и дата изменения записи |
Создание помощника для регистрации событий мы рассмотрим шаг за шагом. Если есть желание – добавляйте свои поля или изменяйте структуру таблицы.
Мой журнал выглядит следующим образом:

Шаг 1. Установка Laravel
Поскольку мы начинаем с нуля, первый этап – инсталляция фреймворка Laravel. Выполним следующую команду для его установки:
composer create-project --prefer-dist laravel/laravel blogШаг 2. Конфигурация базы данных
Все настройки базы данных – название, пароль, имя пользователя и так далее – мы вносим в файл .env, как показано ниже:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=here your database name(blog)
DB_USERNAME=here database username(root)
DB_PASSWORD=here database password(root)
Шаг 3. Создание файлов журнала и модели
Сначала мы выполним миграцию базы данных. В процессе будет создана таблица log_activities для регистрации действий пользователей. Для этого выполним команду, приведенную ниже, которая работает в среде Laravel 5.4 и выше:
php artisan make:migration create_log_activity_tableПосле ее выполнения вы найдете файл в каталоге database/migrations. Откройте его для редактирования, и внесите следующий код:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateLogActivityTable extends Migration
{
/**
* Запуск миграций.
*
* @return void
*/
public function up()
{
Schema::create('log_activities', function (Blueprint $table) {
$table->increments('id');
$table->string('subject');
$table->string('url');
$table->string('method');
$table->string('ip');
$table->string('agent')->nullable();
$table->integer('user_id')->nullable();
$table->timestamps();
});
}
/**
* Остановка миграций.
*
* @return void
*/
public function down()
{
Schema::drop('log_activities');
}
}
Запустите созданный файл миграции с помощью следующей команды:
php artisan migrateТеперь нам следует создать файл модели log_activities, для чего мы выполним следующую команду:
php artisan make:model LogActivityПосле этого вы обнаружите в каталоге /app файл LogActivity.php. Отредактируйте его, добавив следующий код:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class LogActivity extends Model
{
/**
* Атрибуты, которые можно назначить массово.
*
* @var array
*/
protected $fillable = [
'subject', 'url', 'method', 'ip', 'agent', 'user_id'
];
}
Шаг 4. Создание класса для помощника LogActivity
Прежде всего, создайте подкаталог Helpers в директории /app. После этого создайте файл LogActivity.php в этом подкаталоге (app/Helpers/LogActivity.php), откройте его и внесите приведенный ниже код:
<?php
namespace App\Helpers;
use Request;
use App\LogActivity as LogActivityModel;
class LogActivity
{
public static function addToLog($subject)
{
$log = [];
$log['subject'] = $subject;
$log['url'] = Request::fullUrl();
$log['method'] = Request::method();
$log['ip'] = Request::ip();
$log['agent'] = Request::header('user-agent');
$log['user_id'] = auth()->check() ? auth()->user()->id : 1;
LogActivityModel::create($log);
}
public static function logActivityLists()
{
return LogActivityModel::latest()->get();
}
}
Шаг 5. Регистрация класса помощника
Теперь необходимо зарегистрировать созданный класс в качестве фасада Laravel в файле конфигурации config/app.php. Откройте файл app.php и добавьте в него код для загрузки класса:
....
'aliases' => [
....
'LogActivity' => App\Helpers\LogActivity::class,
]Шаг 6. Добавление маршрутов
На этом этапе мы создадим два новых маршрута. Для тестирования журнала я добавил маршрут add-to-log; вы можете просто использовать addToLog() с заголовками вроде «Учетная запись пользователя успешно создана» или «Учетная запись пользователя успешно изменена» – для пояснения к действиям пользователя в отчете. В файл web.php, находящийся в каталоге routes/web.php, добавим два маршрута:
Route::get('add-to-log', 'HomeController@myTestAddToLog');
Route::get('logActivity', 'HomeController@logActivity');Шаг 7. Создание метода контроллера
Теперь мы внесем в файл HomeController.php код, отвечающий за добавление записей в журнал активности пользователей. Файл находится здесь – app/Http/Controllers/HomeController.php:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Создание нового контроллера.
*
* @return void
*/
public function __construct()
{
}
/**
* Вывод панели управления приложения.
*
* @return \Illuminate\Http\Response
*/
public function myTestAddToLog()
{
\LogActivity::addToLog('My Testing Add To Log.');
dd('log insert successfully.');
}
/**
* Вывод панели управления приложения.
*
* @return \Illuminate\Http\Response
*/
public function logActivity()
{
$logs = \LogActivity::logActivityLists();
return view('logActivity',compact('logs'));
}
}Шаг 8. Создание шаблона для отображения журнала
Переходим к созданию Blade шаблона для отображения записей журнала в виде таблицы. Для этого создайте файл logActivity.php, разместите его по адресу resources/views/logActivity.php. Внесите в него следующий код:
<!DOCTYPE html>
<html>
<head>
<title>Log Activity Lists</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />
</head>
<body>
<div class="container">
<h1>Log Activity Lists</h1>
<table class="table table-bordered">
<tr>
<th>No</th>
<th>Subject</th>
<th>URL</th>
<th>Method</th>
<th>Ip</th>
<th width="300px">User Agent</th>
<th>User Id</th>
<th>Action</th>
</tr>
@if($logs->count())
@foreach($logs as $key => $log)
<tr>
<td>{{ ++$key }}</td>
<td>{{ $log->subject }}</td>
<td class="text-success">{{ $log->url }}</td>
<td><label class="label label-info">{{ $log->method }}</label></td>
<td class="text-warning">{{ $log->ip }}</td>
<td class="text-danger">{{ $log->agent }}</td>
<td>{{ $log->user_id }}</td>
<td><button class="btn btn-danger btn-sm">Delete</button></td>
</tr>
@endforeach
@endif
</table>
</div>
</body>
</html>
Все готово к запуску сервера в производство с помощью следующей команды:
php artisan serveТеперь можно тестировать журнал, открывая в браузере следующие локальные адреса:
http://localhost:8000/add-to-log
http://localhost:8000/logActivity
Комментарии
А как подключить логирование? Через миддлвар?