Может ли модель Eloquent иметь несколько наблюдателей? - PullRequest
0 голосов
/ 03 июня 2018

Привет, я хочу написать черту, чтобы добавить наблюдателя в модель, но я подумал, что написать метод загрузки не правильно, и в итоге я обнаружил, что могу загружать черту как 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) {
                // ...
        });
    }
    ...
}

1 Ответ

0 голосов
/ 03 июня 2018

Это не правильный путь.Я думаю, что это может помочь вам: https://laravel.com/docs/5.6/eloquent#observers

Вы привязываете наблюдателей к своим моделям с помощью загрузки службы:

<?php

namespace App\Providers;

use App\User;
use App\Observers\UserObserver;
use Illuminate\Support\ServiceProvider;

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 App\Observers;

use App\User;

class UserObserver
{
    /**
     * Listen to the User created event.
     *
     * @param  \App\User  $user
     * @return void
     */
    public function created(User $user)
    {
        //
    }

    /**
     * Listen to the User deleting event.
     *
     * @param  \App\User  $user
     * @return void
     */
    public function deleting(User $user)
    {
        //
    }
}

И для уточнения.Да, это может иметь несколько наблюдателей.Хотя я никогда не видел полезной ситуации для этого:

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

}

Таким образом, и UserObserver (), и AuthenticableModelsObserver () привязываются к модели User () при загрузке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...