一个雄辩模型可以有多个观察者吗?



嗨,我想写一个特征来向模型添加一个观察者,但我认为编写引导方法不是正确的方法,最终我发现我可以像 boot[TraitName] 一样引导特质,但我想知道我是否用这样的代码添加一个观察者:

trait CreateObserver
{
public static function bootCreateObserver()
{
static::creating(function (Model $model) {
// ...
});
}
}

我可以像下面这样为我的模型添加另一个观察者吗,或者它将覆盖我的特征观察者?

class MyModel extends Model
{
use CreateObserver;
public static function boot()
{
static::creating(function ($model) {
// ...
});
}
...
}

这不是正确的方法。我认为这可能会对您有所帮助: https://laravel.com/docs/5.6/eloquent#observers

您可以使用服务引导将观察器绑定到模型:

<?php
namespace AppProviders;
use AppUser;
use AppObserversUserObserver;
use IlluminateSupportServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
User::observe(UserObserver::class);
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}

在观察器中,您可以添加所有所需的功能:

<?php
namespace AppObservers;
use AppUser;
class UserObserver
{
/**
* Listen to the User created event.
*
* @param  AppUser  $user
* @return void
*/
public function created(User $user)
{
//
}
/**
* Listen to the User deleting event.
*
* @param  AppUser  $user
* @return void
*/
public function deleting(User $user)
{
//
}
}

并详细说明。是的,它可以有多个观察者。虽然我从未见过有用的情况:

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

这样,UserObserver(( 和 AuthenticableModelsObserver(( 在引导时都绑定到 User(( 模型。

最新更新