Понятия не имею, почему слушатель не вызывается в Laravel - PullRequest
0 голосов
/ 11 октября 2019

Вот событие:

<?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 Ответ

2 голосов
/ 11 октября 2019

Так что я отсталый и возьму понижение на этом, но для дальнейшего использования, убедитесь, что ваши заявления об использовании являются правильными. потому что 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;

Вот почему вызывалось событие, а не слушатель. В классе контроллера, где вызывалось рассматриваемое событие, я импортировал событие должным образом, а в поставщике службы событий - нет.

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