Laravel EventListener не срабатывает - PullRequest
6 голосов
/ 01 октября 2019

Я создал событие и слушателя в Laravel, но слушатель не срабатывает. Это на самом деле стреляет на машине моего коллеги. Это заставляет меня думать, что реальный код работает и что конфигурация в порядке.

Слушатель:

<?php

namespace App\Listeners\Consensus;

use App\Events\Consensus\ManualGroupChannelNotificationEvent;
use Illuminate\Support\Facades\Log;

/**
 * Class ManualGroupChannelNotificationListener
 * @package App\Listeners\Consensus
 */
class ManualGroupChannelNotificationListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  ManualGroupChannelNotificationEvent  $event
     * @return void
     */
    public function handle(ManualGroupChannelNotificationEvent $event)
    {
        Log::debug('Listener');
    }
}

Событие:

<?php
namespace App\Events\Consensus;

use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Support\Facades\Log;

/**
 * Class ManualGroupChannelNotificationEvent
 * @package App\Events\Consensus
 */
class ManualGroupChannelNotificationEvent
{
    use Dispatchable;

    /*
     * ExternalComment constructor.
     *
     * @param Comment $comment
     * @param User $currentUser
     */
    public function __construct()
    {
        Log::debug('Event');
    }
}

EventServiceProvider:

protected $listen = [
    'App\Events\Consensus\ManualGroupChannelNotificationEvent' => [
        'App\Listeners\Consensus\ManualGroupChannelNotificationListener',
    ],
];

Запуск события:

event(new ManualGroupChannelNotificationEvent());

Я выполнил все команды для очистки кэша и т. Д., Но все равно это не работает.

php artisan clear-compiled
php artisan config:clear
php artisan cache:clear
composer dump-autoload
php artisan queue:restart

Если этот код работаетна другой машине, что еще я могу сделать, чтобы она работала на моей?

Другая информация:

  • Моя регистрация работает;Событие-сообщение регистрируется.
  • Другие подобные события работают.

Ответы [ 3 ]

1 голос
/ 04 октября 2019

Хорошо. Я протестировал вашу настройку в Laravel 5.8, вручную создав ваши классы, и событие и слушатель записываются правильно.

Я предложу вам избегать ручного создания классов событий и слушателей. Вместо этого сначала укажите их в EventServiceProvider.php, как вы сделали:

protected $listen = [
    'App\Events\Consensus\ManualGroupChannelNotificationEvent' => [
        'App\Listeners\Consensus\ManualGroupChannelNotificationListener',
    ],
];

Затем сгенерируйте необходимые файлы классов автоматически, используя эту команду ремесленника

php artisan event:generate

Теперь вы можете изменять сгенерированные классывключив директивную строку use Illuminate\Support\Facades\Log;, а затем используйте вызов метода Log::debug() в ваших методах конструктора событий и обработчика слушателя.

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

1 голос
/ 07 октября 2019

Я удалил репо и снова клонировал, теперь работает.

1 голос
/ 04 октября 2019

Прежде всего, попробуйте применить chmod -R 777 storage/logs, это может быть просто проблема с авторизацией.

Возможно, регистрация ваших событий не удалась, вы можете попробовать добавить это в EventServiceProvider

/**
 * Determine if events and listeners should be automatically discovered.
 *
 * @return bool
 */
public function shouldDiscoverEvents()
{
    return true;
}

Ваша вторая рабочая машина такая же, как и первая?

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