Пример создания журнала активности пользователей в 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 IlluminateSupportFacadesSchema; use IlluminateDatabaseSchemaBlueprint; use IlluminateDatabaseMigrationsMigration; 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'); } }
Пример CRUD на Laravel 8 | Руководство по Laravel 8 для начинающих
Запустите созданный файл миграции с помощью следующей команды:
php artisan migrate
Теперь нам следует создать файл модели log_activities, для чего мы выполним следующую команду:
php artisan make:model LogActivity
После этого вы обнаружите в каталоге /app файл LogActivity.php. Отредактируйте его, добавив следующий код:
<?php namespace App; use IlluminateDatabaseEloquentModel; 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 AppHelpers; use Request; use AppLogActivity 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(); } }
Пример использования планировщика Laravel 8 для выполнения Cron заданий
Шаг 5. Регистрация класса помощника
Теперь необходимо зарегистрировать созданный класс в качестве фасада Laravel в файле конфигурации config/app.php. Откройте файл app.php и добавьте в него код для загрузки класса:
.... 'aliases' => [ .... 'LogActivity' => AppHelpersLogActivity::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 AppHttpControllers; use IlluminateHttpRequest; class HomeController extends Controller { /** * Создание нового контроллера. * * @return void */ public function __construct() { } /** * Вывод панели управления приложения. * * @return IlluminateHttpResponse */ public function myTestAddToLog() { LogActivity::addToLog('My Testing Add To Log.'); dd('log insert successfully.'); } /** * Вывод панели управления приложения. * * @return IlluminateHttpResponse */ public function logActivity() { $logs = LogActivity::logActivityLists(); return view('logActivity',compact('logs')); } }
Простой пример отправки формы в Laravel через AJAX jQuery
Шаг 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
Источник: www.internet-technologies.ru