thtg88/journalism

Journalism 是一个 Laravel 包,提供了一种简单的方法将数据记录到您的数据库中

v0.1.4 2021-06-22 13:51 UTC

This package is auto-updated.

Last update: 2024-09-07 14:13:24 UTC


README

Journalism 是一个 Laravel 包,提供了一种简单的方法将数据记录到您的数据库。

安装

composer require thtg88/journalism

您可以通过运行以下命令发布配置文件和视图:

php artisan vendor:publish --provider="Thtg88\Journalism\JournalismServiceProvider"

用法

Journalism 在跟踪模型变化时特别有用。

因此,您可以将它应用于每个模型事件的通用模型观察者(创建、更新和删除),或者如果您使用仓库模式来跟踪所有 CRUD 方法,以记录某些更改何时发生以及由谁发起。

请确保在 AppServiceProvider 中将助手注册为单例

// app/Providers/AppServiceProvider.php

use Thtg88\Journalism\Helpers\JournalEntryHelper;

public function register(): void
{
    $this->app->singleton(JournalEntryHelper::class, static function ($app) {
        return $app->make(JournalEntryHelper::class);
    });
}

或者您可以直接在您喜欢的任何类中使用它

use Thtg88\Journalism\Helpers\JournalEntryHelper;

(new JournalEntryHelper())->createJournalEntry('create', $model, ['foo' => 'bar']);

使用模型观察者

有关模型观察者的更多文档,请参阅 Laravel 文档

首先,创建一个基础模型观察者

<?php

// app/Observers/Observer.php

namespace App\Observers;

use Illuminate\Database\Eloquent\Model;
use Thtg88\Journalism\Helpers\JournalEntryHelper;
use Thtg88\Journalism\Models\JournalEntry;

abstract class Observer
{
    /**
     * Handle the Model "created" event.
     *
     * @param \Illuminate\Database\Eloquent\Model $model
     * @return void
     */
    public function created(Model $model): void
    {
        if (config('journalism.enabled') === false) {
            return;
        }

        // Create journal entry only if not creating journal entry i.e. infinite recursion
        if ($model instanceof JournalEntry) {
            return;
        }

        app(JournalEntryHelper::class)->createJournalEntry(
            'create',
            $model,
            $model->toArray(),
        );
    }

    /**
     * Handle the Model "updated" event.
     *
     * @param \Illuminate\Database\Eloquent\Model $model
     * @return void
     */
    public function updated(Model $model): void
    {
        if (config('journalism.enabled') === false) {
            return;
        }

        // Create journal entry only if not creating journal entry i.e. infinite recursion
        if ($model instanceof JournalEntry) {
            return;
        }

        app(JournalEntryHelper::class)->createJournalEntry(
            'update',
            $model,
            $model->toArray(),
        );
    }

    /**
     * Handle the Model "deleted" event.
     *
     * @param \Illuminate\Database\Eloquent\Model $model
     * @return void
     */
    public function deleted(Model $model): void
    {
        if (config('journalism.enabled') === false) {
            return;
        }

        // Create journal entry only if not creating journal entry i.e. infinite recursion
        if ($model instanceof JournalEntry) {
            return;
        }

        app(JournalEntryHelper::class)->createJournalEntry('delete', $model);
    }

    /**
     * Handle the Model "forceDeleted" event.
     *
     * @param \Illuminate\Database\Eloquent\Model $model
     * @return void
     */
    public function forceDeleted(Model $model): void
    {
        if (config('journalism.enabled') === false) {
            return;
        }

        // Create journal entry only if not creating journal entry i.e. infinite recursion
        if ($model instanceof JournalEntry) {
            return;
        }

        app(JournalEntryHelper::class)->createJournalEntry('delete', $model);
    }
}

然后,创建一个实际模型观察者,继承自您的基类

<?php

// app/Observers/UserObserver.php

namespace App\Observers;

class UserObserver extends Observer
{
}

EventServiceProvider 中注册它

use App\Models\User;
use App\Observers\UserObserver;

public function boot()
{
    User::observe(UserObserver::class);
}

现在您可以使用用户模型执行数据库操作。应在 journal_entries 表中看到一个数据库行!

使用仓库模式

即将推出!

许可证

Journalism 是一个开源软件,受 MIT 许可证 许可。

安全漏洞

如果您在 Journalism 中发现安全漏洞,请发送电子邮件至 Marco Marassi,邮箱地址为 security@marco-marassi.com。所有安全漏洞都将得到及时处理。