События и слушатели Laravel

Это мой класс событий, когда я использую

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

когда я запускаю следующую команду

php artisan event:generate

он создает событие и прослушиватель как в каталоге поставщика услуг, если я помещаю пространство имен перед событием, так и прослушивателем, например

App\Events\CategoryEvent::class

Он по-прежнему создает App\Event и App\Event в каталоге поставщика услуг, как создать каталог событий и слушателей в пространстве имен приложений.

введите здесь описание изображения


person Waheed Sindhani    schedule 10.08.2020    source источник


Ответы (2)


Похоже на проблему с пространством имен. Вы можете убедиться, что эти классы имеют псевдонимы:

use App\Events\Registered;
use App\Listeners\SendEmailVerificationNotification;
...

иначе Registered::class будет App\Providers\Registered.

person lagbox    schedule 10.08.2020
comment
спасибо, я искал в Google и нашел решение, и оно сработало для меня. event_name и имя слушателя должны быть в кавычках и не требуют части event_name::class. Но затем Pycharm предлагает, чтобы это было похоже на **event_name::class', но это работает с этим предупреждением. - person Waheed Sindhani; 10.08.2020
comment
ничто не должно быть строковым литералом, вы просто не ссылаетесь на правильные классы при использовании Class::class, отсюда и проблема с пространством имен \App\Events\Registered::class === 'App\Events\Registered' - person lagbox; 10.08.2020

Кажется, что Laravel не поддерживает собственный путь для генерации событий. Поэтому лучше всего, вероятно, просто создать его вручную в нужном каталоге и самостоятельно вставить в EventServiceProvider. Это немного ручной работы, но это не займет больше минуты.

Подобный вопрос уже прошел через это: Как создать события/прослушиватели с помощью команды artisan на уровне подкаталога?

person Severin    schedule 10.08.2020
comment
@ServerinDK Я нашел решение, спасибо за вашу помощь. Я думаю, что проблема связана с синтаксисом, потому что более старая версия использует синтаксис, отличный от laravel 7., и я не работал в более старой версии, поэтому столкнулся с такими проблемами. - person Waheed Sindhani; 10.08.2020