在此事件:
<?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()));
有什么想法吗?我检查了拼写和名称空间,一切似乎正确。我想念什么?
没有错误,没有任何错误。测试仍然通过(我不伪造事件),并且测试覆盖率表明事件被调用,但是测试覆盖率表明侦听器未被调用。当我在浏览器中尝试此操作时,没有创建任何用户-由侦听器完成。
我所有其他事件及其关联的侦听器都很好。
发生了什么事?
答案 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;
这就是为什么调用事件而不是调用侦听器的原因。在调用有问题的事件的控制器类中,我正确地导入了事件,但在事件服务提供程序中却没有。