Пример создания журнала активности пользователей в Laravel

Пример создания журнала активности пользователей в Laravel

В этом руководстве мы рассмотрим создание собственного журнала для регистрации активности пользователей – вместо использования пакета User Activity. Пример, который будет рассмотрен, подходит для Laravel версий 6,7 и 8. Я разработал таблицу и фасад помощника для отслеживания действий пользователей – вы можете изменить структуру сводной таблицы и метод помощника, как вам нравится.

Мой пример очень прост, образцы кода помогут вам разобраться в логике метода, и установка дополнительных пакетов не понадобится. В отчетную таблицу входят следующие поля:

ID Номер
Subject Действие
URL Где на сайте были сделаны изменения
Method Метод создания (изменения) записи
IP IP-адрес пользователя
Agent Браузер, операционная система пользователя
user_id Идентификатор
created_at Дата и время создания записи
updated_at Время и дата изменения записи

Создание помощника для регистрации событий мы рассмотрим шаг за шагом. Если есть желание – добавляйте свои поля или изменяйте структуру таблицы.

Мой журнал выглядит следующим образом:

Пример создания журнала активности пользователей в Laravel

Шаг 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