Kdyby\Events – pořadí volání jednotlivých listerneru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
iwory
Člen | 147
+
0
-

Ahoj,
na vytvoření objednávky mám vícero listenerů který dělají plno práce od vytvoření faktury, odeslání mailu, odeslání do PPL, sms apod.

Jelikož by samotný Subscriber byla velká třída, tak je mám rozdělný do více tříd kde každá poslouchá na stejnou událost. Tedy mám OrderNotifyEmailSubscriber, SendOrderToPPLSubscriber atd.

Řeším ale problém s pořadím. Potřebuji aby se mi jedntolivé listenery volaly v určitém pořadí.
Koukal jsem do dokumentace na Listener priorities který by řešil můj problém. Ale nevím jestli jde a případně jak použít ikdyž mám jednotlivé listenery ve více třídách.

Díky moc za případnou nápovědu

CZechBoY
Člen | 3608
+
+2
-

Proč potřebuješ přesné pořadí? Ty listenery by měly být nezávislé na sobě. Pokud potřebuješ něco vždy provést a ostatní na něm závisí tak to proveď ještě před vystřelením eventu.

iwory
Člen | 147
+
0
-

CZechBoY napsal(a):

Proč potřebuješ přesné pořadí? Ty listenery by měly být nezávislé na sobě. Pokud potřebuješ něco vždy provést a ostatní na něm závisí tak to proveď ještě před vystřelením eventu.

Chtěl jsem vygenerovat fakturu kterou mu následně poslat do mailu… Takže jsem chtěl zařídit aby se listener s generováním faktury zavolal dříve než odeslání e-mailu.

Teoreticky bych tyhle dva mohl spojit do jednoho, ale zajímalo by mě, zda by to mělo řešení nebo to spíš neřešit přes listenery.

CZechBoY
Člen | 3608
+
+2
-

Muzes to udelat pres event, ale potom musis udelat druhou udalost faktura vytvorena. Na tuhle udalost pak bude reagovat odesilac mailu faktur.

Editoval CZechBoY (10. 4. 2017 9:33)

Oli
Člen | 1215
+
0
-

Já mám pocit, že i listener může být událost. Už si to nepamatuju uplně přesně, ale myslím, že jsem to takhle jednou použil. Že jsem měl událost vytvoř mě něco a když se vytvořilo něco konkrétního, tak se ještě poslal mail, nebo tak něco…

iwory
Člen | 147
+
0
-

CZechBoY napsal(a):

Muzes to udelat pres event, ale potom musis udelat druhou udalost faktura vytvorena. Na tuhle udalost pak bude reagovat odesilac mailu faktur.

To zní fér, díky moc :)

Danny19
Člen | 5
+
-1
-

Ahoj, já to třeba mám tak, že na změnu stavu objednávky mám dva listenery, kde prvně změním stav objednávky a pak se na základě toho odešle email. A to pořadí nastavuješ jako druhou hodnotu pole, kde vyšší číslo má přednost.
Mám to třeba takhle:

"App\Model\Facades\OrderFacade::onOrderStateChange" => array("orderStateChange", 1)