alexstewartja/laravel-attribute-observer

1.5.0 2024-02-18 23:14 UTC

This package is auto-updated.

Last update: 2024-09-05 16:31:16 UTC


README

Laravel Attribute Observer - Social Image

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Donate Buy Me A Coffee

要求

  • 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 事件上观察。支持的事件包括:creatingcreatedupdatingupdatedsavingsaveddeletingdeleted

定义属性观察器方法时遵循的命名约定是:on|AttributeName|Event

例如,如果我们想在用户尝试更新其电子邮件时,每次都检查其电子邮件是否与全球垃圾邮件/虚荣邮件列表相匹配,我们就会在名为 onEmailUpdating 的属性观察器方法中实现该逻辑。

请注意,属性名称必须使用 PascalCase,事件名称必须使用 Capitalized

测试

composer test

变更日志

请参阅 CHANGELOG 了解最近更改的详细信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全漏洞

请查阅 我们的安全策略 了解如何报告安全漏洞。

致谢

许可

MIT 许可证(MIT)。有关更多信息,请参阅 许可文件

捐赠

我在业余时间维护此包。如果它对您有益,请考虑捐赠或买我一杯咖啡,以保持其不断改进。

Donate Buy Me A Coffee