Automatická registrace subscribers pro contributte/event-dispatcher

neznamy_uzivatel
Člen | 115
+
0
-

Ahoj,
prosím o radu, jak contributte/event-dispatcher s nette 3.0 donutit automaticky registrovat subscribery..

Nevím, jestli to je verzí nette… nicméně v extension v doBeforeCompile je kód, který to zaregistruje, jenže $subscribers = $builder->findByType(EventSubscriberInterface::class); vrací prázdné pole. Zkoušel jsem tam různé další varianty z obou namespaců contributte i symfony, ale nepodařilo se.

mám lehce upravený subscriber z nějakého tutoriálu:

namespace App\Events\Subscribers;

use Contributte\EventDispatcher\EventSubscriber;
use Symfony\Component\EventDispatcher\Event;

final class OrderPlacedSubscriber implements EventSubscriber
{

    public static function getSubscribedEvents(): array
    {
        return [
            'order.placed' => 'orderPlaced'
        ];
    }

    public function orderPlaced(Event $event): void
    {

        $order = $event->getOrder();
        echo "--event-orderPlaced-" . $order->getId() . "--";
    }

}

a když ho zaregistruju pomocí $dispatcher->addSubscriber(new OrderPlacedSubscriber());, tak funguje..

Dík za rady :)

Editoval neznamy_uzivatel (14. 4. 2019 9:00)

Martk
Člen | 661
+
0
-

Registruješ subscriber jako službu v configu?

neznamy_uzivatel
Člen | 115
+
0
-

jj, zaregistrovano + experimenty s konfiguraci..
Takto to mam v cistem sandboxu 3.0 cerstve stazenem pres composer

extensions:
    events: Contributte\EventDispatcher\DI\EventDispatcherExtension

events:
    autoload: true
    lazy: false
MajklNajt
Člen | 494
+
+1
-

Martk myslel, či máš zaregistrovaný subscriber, čiže takto:

services:
	- App\Events\Subscribers\OrderPlacedSubscriber
neznamy_uzivatel
Člen | 115
+
0
-

MajklNajt napsal(a):

Martk myslel, či máš zaregistrovaný subscriber, čiže takto:

services:
	- App\Events\Subscribers\OrderPlacedSubscriber

No tak to samozřejmě… nemám :)

OK, super, proč mě proboha tohle nenapadlo…

Rád bych toto ale úplně automaticky, vůbec mě nenapadla nutnost to někde registrovat, když se to hledá podle interface.
Řešení by tedy mohlo být projít v cyklu všechny třídy ve složce /app/Events/Subscribers a zaregistrovat je ručně přes $dispatcher->addSubscriber? Nebo bych tím stvořil nějakou moc velkou prasečinu?
Rozdíl bude asi jen v tom, že v extension se to sestavuje jen jednou při změně, takže bych musel pořešit jen to, aby to šlo někam do cache do doby, než se změní obsah složky..?

Felix
Nette Core | 1197
+
0
-

Ahoj. Balicek jeste neni ready pro Nette 3. Musi se upravit par drobnosti. Ale zbytek by mel fungovat v pohode. :) Jak pisou ostatni.