【问题标题】:Laravel events not firing?Laravel 事件没有触发?
【发布时间】:2017-03-12 09:19:57
【问题描述】:

我的任何eloquent.saved 事件处理程序似乎都无法运行。

我试过了:

<?php

namespace App\Providers;

use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
    protected $listen = [
        'eloquent.saved: \App\Models\Company' => [
            '\App\Models\Company@hasSaved',
        ],
    ];

}

然后将此方法添加到\App\Models\Company

public function hasSaved() {
    die("SAVED!!!");
}

但当我保存公司时它不会运行。

我尝试创建一个观察者:

<?php

namespace App\Providers;

use App\Models\Company;
use App\Observers\CompanyObserver;
use DB;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{

    public function register()
    {
        Company::observe(CompanyObserver::class);
    }
}

但事件永远不会触发:

<?php namespace App\Observers;

class CompanyObserver {

    public function saved() {
        die('saved');
    }

    public function saving() {
        die('saving');
    }
}

我尝试在 EventServiceProvider 中使用侦听器类:

protected $listen = [
    'eloquent.saved: \App\Models\Company' => [
        \App\Listeners\CompanySavedListener::class,
    ],
];

但这也永远不会运行。

最后,我尝试将此添加到EventServiceProvider

public function boot(DispatcherContract $events)
{
    parent::boot($events);

    $events->listen('eloquent.*', function() {
        dump(func_get_args());
    });
}

这确实会触发一堆随机事件,但它只是为我提供模型实例——我不知道实际触发了什么事件。

那么发生了什么?我只想知道我的Company 何时保存。

【问题讨论】:

    标签: laravel laravel-5 laravel-5.2 laravel-events


    【解决方案1】:

    让我们采用观察者的方式。问题是你使用了:

    Company::observe(CompanyObserver::class);
    

    AppServiceProviderregister 方法中,您应该在boot 方法中使用它。当您将此行移动到boot 方法(同一个类)时,它将毫无问题地工作,当您保存公司时,应该启动来自CompanyObserversaved 方法的代码。

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 2017-02-19
      • 2019-03-22
      • 2013-02-12
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多