Php Laravel:多个模型的一个观察者

Php Laravel:多个模型的一个观察者,php,laravel,Php,Laravel,我有多个模型,在创建方法时具有相同的逻辑,我可以有一个观察者吗?还是另一种避免为每个模型创建多个观察者的方法?我会为每个模型保留一个观察者,但取而代之的是提取一个Trait/a基类/a服务类,该类具有您可以在这些观察者中使用的公共功能 您可以在的引导方法中手动注册基于闭包的事件 您的EventServiceProvider: 为此,您可以使用可引导特性 <?php namespace App\Traits; trait MyModelTrait { public static f

我有多个模型,在创建方法时具有相同的逻辑,我可以有一个观察者吗?还是另一种避免为每个模型创建多个观察者的方法?

我会为每个模型保留一个观察者,但取而代之的是提取一个Trait/a基类/a服务类,该类具有您可以在这些观察者中使用的公共功能

您可以在的引导方法中手动注册基于闭包的事件 您的EventServiceProvider:


为此,您可以使用可引导特性

<?php
namespace App\Traits;

trait MyModelTrait
{
    public static function bootMyModelTrait()
    {
        static::created(function ($model) {
            $model->someField = 'someLogicValue';
        });
    }
}

您可以为此目的使用Observer类

在提供程序中应用该类会更好,因此,如果laravel提供更好的方法,将来您可以轻松删除该类

目前我们使用的是LaravelV8.42.1,但这似乎适用于旧版本


名称空间应用程序\提供者;
使用App\Observers\GlobalObserver;
使用App\Models\Product;
类ObserverServiceProvider扩展了ServiceProvider
{
公共职能登记册()
{
//
}
公共函数boot()
{
self::registerGlobalObserver();
}
专用静态函数registerGlobalObserver()
{
/**@var\illumb\Database\elount\Model[]$MODELS*/
$MODELS=[
Product::class,
//……这里有更多的型号
];
foreach($MODELS作为$MODEL){
$MODEL::observe(GlobalObserver::class);
}
}
}
那么这将是你的观察员


<?php
namespace App\Traits;

trait MyModelTrait
{
    public static function bootMyModelTrait()
    {
        static::created(function ($model) {
            $model->someField = 'someLogicValue';
        });
    }
}