Automatická registrace subscribers pro contributte/event-dispatcher
- neznamy_uzivatel
- Člen | 115
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)
- neznamy_uzivatel
- Člen | 115
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
- neznamy_uzivatel
- Člen | 115
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..?