alexstewartja / laravel-attribute-observer
监听并响应对 Eloquent 模型中属性所做的更改。
Requires
- php: ^7.4|^8.0
- illuminate/contracts: ^7.0|^8.0|^9.0|^10.0|^11.0
- spatie/laravel-package-tools: ~1.12.1|^1.13.0
Requires (Dev)
- nunomaduro/collision: ^4.0|^5.0|^6.0|^7.0|^8.0
- orchestra/testbench: ^6.0|^7.0|^8.0
- pestphp/pest: ^1.0|^2.0
- pestphp/pest-plugin-laravel: ^1.0|^2.0
- spatie/laravel-ray: ^1.0
- vimeo/psalm: ^5.0
README
要求
- PHP: 7.4+
- Laravel: 7+
安装
您可以通过 composer 安装此包
composer require alexstewartja/laravel-attribute-observer
配置
使用以下命令发布配置文件(config/attribute-observer.php)
php artisan vendor:publish --provider="AlexStewartJA\LaravelAttributeObserver\LaravelAttributeObserverServiceProvider"
这是已发布配置文件的默认内容
return [ /* |-------------------------------------------------------------------------- | Attribute Observers |-------------------------------------------------------------------------- | | Here you may configure all desired Models and their respective Attribute | Observers. For example: | | 'observers' => [ | \App\Models\Order::class => [ | \App\AttributeObservers\OrderStatusObserver::class, | ], | ] | */ 'observers' => [ // Define your model & attribute observers here... ] ];
使用您想要的 模型 => 属性观察器 映射填充 observers
数组。
用法
属性观察器
make:laravel-attribute-observer
Artisan 命令是创建新属性观察器类的最简单方法
php artisan make:laravel-attribute-observer OrderStatusObserver --model=Order
此命令将新属性观察器放置在您的 App/AttributeObservers
目录中。如果此目录不存在,Artisan 将为您创建它。您新创建的属性观察器将如下所示
<?php namespace App\AttributeObservers; use App\Models\Order; class OrderStatusObserver { /** * Handle changes to the "id" field of Order on "created" events. * * @param \App\Models\Order $order * @param mixed $newValue The current value of the field * @param mixed $oldValue The previous value of the field * @return void */ public function onIdCreated(Order $order, mixed $newValue, mixed $oldValue) { // } }
然后您可以修改代码以匹配您的业务逻辑,例如
<?php namespace App\AttributeObservers; use App\Events\OrderStatusChanged; use App\Models\Order; class OrderStatusObserver { /** * Handle changes to the "status" field of Order on "saved" events. * * @param \App\Models\Order $order * @param mixed $newValue The current value of the field * @param mixed $oldValue The previous value of the field * @return void */ public function onStatusSaved(Order $order, mixed $newValue, mixed $oldValue) { // Dispatch an event that sends an order update email to the customer OrderStatusChanged::dispatch($order); } }
属性观察器方法始终按顺序提供 模型实例、新属性值 和 旧属性值。
事件
您可以在 Eloquent 模型生命周期中派发的所有典型 CRUD 事件上观察。支持的事件包括:creating
、created
、updating
、updated
、saving
、saved
、deleting
、deleted
。
定义属性观察器方法时遵循的命名约定是:on|AttributeName|Event
例如,如果我们想在用户尝试更新其电子邮件时,每次都检查其电子邮件是否与全球垃圾邮件/虚荣邮件列表相匹配,我们就会在名为 onEmailUpdating
的属性观察器方法中实现该逻辑。
请注意,属性名称必须使用 PascalCase,事件名称必须使用 Capitalized。
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全漏洞
请查阅 我们的安全策略 了解如何报告安全漏洞。
致谢
许可
MIT 许可证(MIT)。有关更多信息,请参阅 许可文件。
捐赠
我在业余时间维护此包。如果它对您有益,请考虑捐赠或买我一杯咖啡,以保持其不断改进。