不知道为什么不在Laravel中调用监听器

时间:2019-10-11 19:14:44

标签: php laravel

在此事件:

<?php

namespace App\Modules\Clinicians\Events;

use Illuminate\Queue\SerializesModels;

class CreateHealthCareProviderEvent
{
    use SerializesModels;

    public $data;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct(array $data)
    {
        $this->data = $data;
    }
}

该事件被称为正常。但是听众:

<?php

namespace App\Modules\Clinicians\Listeners;

use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\Modules\Clinicians\Events\CreateHealthCareProviderEvent;
use App\Modules\Clinicians\Events\EmailClinicAdminsEvent;
use App\Modules\Users\Services\RegisterUserService;

class CreateHealthCareProviderListener
{

    private $registerUserService;

    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct(RegisterUserService $registerUserService)
    {
        $this->registerUserService = $registerUserService;
    }

    /**
     * Handle the event.
     *
     * @param  object  $event
     * @return void
     */
    public function handle(CreateHealthCareProviderEvent $event)
    {
        $user = $this->registerUserService->setRequestData($event->data)->registerUser(Clinic::find($event->data['clinic_id']));

        $user->clinician()->create([
            'user_id'   => $user->id,
        ]);

        $user->clinician->clinics()->attach($event->data['clinic_id']);

        event(new EmailClinicAdminsEvent($user, $event->data['clinic_id']));
    }
}

从不打电话。曾经那我该如何注册呢?

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],

        // When a new health care provider registers:
        CreateHealthCareProviderEvent::class => [
            CreateHealthCareProviderListener::class,
        ],

        // Email the Clinic admins when a healthcare provider registers:
        // Called in the CreateHealthCareProviderListener handler method.
        EmailClinicAdminsEvent::class => [
            EmailClinicAdminsListener::class,
        ],
    ];

    ...
}

我以前从未有过注册事件和侦听器这样的问题。他们总是工作。但是由于某种原因,监听器不会为此事件触发。事件触发得很好。但是听众却没有。我想念什么?

我尝试过:

  • php artisan optimize
  • composer dump-autoload

没事。

其称呼为:

    // Create the health care provider user:
    event(new CreateHealthCareProviderEvent($request->all()));

有什么想法吗?我检查了拼写和名称空间,一切似乎正确。我想念什么?

没有错误,没有任何错误。测试仍然通过(我不伪造事件),并且测试覆盖率表明事件被调用,但是测试覆盖率表明侦听器未被调用。当我在浏览器中尝试此操作时,没有创建任何用户-由侦听器完成。

我所有其他事件及其关联的侦听器都很好。

发生了什么事?

1 个答案:

答案 0 :(得分:2)

因此,我很沮丧,并且会对此表示反对,但是为了将来参考,请确保您的use声明正确。因为Laravel在注册事件时不会告诉您:

use App\Modules\Clinicians\CreateHealthCareProviderEvent;
use App\Modules\Clinicians\EmailClinicAdminsEvent;
use App\Modules\Clinicians\CreateHealthCareProviderListener;
use App\Modules\Clinicians\EmailClinicAdminsListener;

您认为这里缺少什么?让我告诉你:

use App\Modules\Clinicians\Events\CreateHealthCareProviderEvent;
use App\Modules\Clinicians\Events\EmailClinicAdminsEvent;
use App\Modules\Clinicians\Listeners\CreateHealthCareProviderListener;
use App\Modules\Clinicians\Listeners\EmailClinicAdminsListener;

这就是为什么调用事件而不是调用侦听器的原因。在调用有问题的事件的控制器类中,我正确地导入了事件,但在事件服务提供程序中却没有。