thtg88 / journalism
Journalism 是一个 Laravel 包,提供了一种简单的方法将数据记录到您的数据库中
v0.1.4
2021-06-22 13:51 UTC
Requires
- php: ^8.0
- illuminate/auth: ^8.0
- illuminate/database: ^8.0
- illuminate/support: ^8.0
Requires (Dev)
- brainmaestro/composer-git-hooks: ^2.8
- friendsofphp/php-cs-fixer: ^2.18
- orchestra/testbench: ^6.14
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^4.6
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。所有安全漏洞都将得到及时处理。