【问题标题】:Laravel observer property not being called on update更新时未调用 Laravel 观察者属性
【发布时间】:2023-01-24 02:33:32
【问题描述】:

我正在调查观察者,我发现在 App\Providers\EventServiceProviderboot() 方法期间调用观察者不是 laravel 可以使用属性 protected $observers 调用它。

在 boot 方法中调用它时它工作得很好,但是当我把它放在属性中时它不起作用。

我究竟做错了什么?我在文档中找不到任何其他解释。

我的事件服务提供商:

class EventServiceProvider extends ServiceProvider
{
    /**
     * Summary of Observers
     * @var mixed
     */
    protected $observers = [
        User::class => [UserObserver::class],
    ];

    /**
     * Register any events for your application.
     *
     * @return void
     */
    public function boot()
    {
        //User::observe(UserObserver::class);
        //Above line is commented because property $observers is used, but uncommented when property observers is commented.
    }

我的观察者:

class UserObserver
{

    /**
     * Handle the User "updated" event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function updated(User $user)
    {
        $dirty = $user->getChanges();
        dump($user);
        dd($dirty);
    }
}

【问题讨论】:

  • 你确定吗?事件和观察者通常在幕后工作,因此 dddump 不会出现在您认为会出现的地方。 Log::info() 会更好,然后您检查 Laravel 日志文件以获取信息。
  • 我一定会检查一下,问题是当我在启动函数中使用它时,DD 确实有效,但是当我使用该属性调用它时,它什么也没做,所以我只是假设它不起作用。
  • 我无法从您提供的代码中判断出了什么问题,看起来一切都已正确设置。而 Laravel 在幕后使用 $model::observe(...) 方法,所以这两种方法之间应该没有任何区别。您可以使用php artisan event:list --event "eloquent.updated: App\Models\User" 命令查看是否已注册观察者侦听器。这可能有助于缩小问题范围。

标签: php laravel observers


【解决方案1】:

你有没有试过调用 $this->register();在启动功能中?

class EventServiceProvider extends ServiceProvider
{
    /**
     * Summary of Observers
     * @var mixed
     */
    protected $observers = [
        User::class => [UserObserver::class],
    ];

    /**
     * Register any events for your application.
     *
     * @return void
     */
    public function boot()
    {
        $this->register();
    }

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 2021-08-04
    • 2017-10-16
    • 2017-05-30
    • 2021-09-24
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    相关资源
    最近更新 更多