Список всех пользовательских событий - PullRequest
0 голосов
/ 26 февраля 2020

Есть ли способ получить список всех моих пользовательских событий в Laravel? Я настроил систему уведомлений, чтобы я мог подписать пользователя на уведомления об определенных событиях. В настоящее время у меня есть определенный вручную список классов:

<?php
namespace App\Http\Controllers;

class ContactController extends Controller
{
    private $events;

    public function __construct()
    {
        $this->events = [
            App\Events\SomethingHappened::class,
            App\Events\SomethingElseHappened::class,
        ];
    }

    public function edit(Contact $contact)
    {
        $events = $this->events;
        return view("contacts.edit")->with(compact("contact", "events"));
    }
}

А затем в шаблоне я извлекаю свойство publi c stati c, чтобы получить описание, и выкидываю его в поле выбора.

<select name="events[]" multiple="multiple">
@foreach ($events as $event)
    <option value="{{ $event }}">{{ __($event::$description) }}</option>
@endforeach
</select>

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

Я думал о сканировании через каталог App/Events и фильтрации событий без свойства $description, но это кажется очень хакерским. Любые другие варианты?

1 Ответ

0 голосов
/ 04 марта 2020

Посмотрите на EventDispatcher.

$dispatcher = \Illuminate\Database\Eloquent\Model::getEventDispatcher();

$dispatcher->listeners будет иметь то, что вы ищете, хотя он также включает в себя все события фреймворка.

...