Události zavěšené na presenterech
- akadlec
- Člen | 1326
Lze nějakým způsobem pověsit události na presenter? Konkrétně mám modul pro ACL který není podmínkou aby v appce byl a proto bych rád přímo v něm řešil kontrolu oprávnění. Do BasePresenteru bych si pak hodil něco jako onCheckRequrements a tady na to by byl navěšen listener z ACL modulu. Vím že Kdyby/Events potřebují aby objekt na který se má pověsit událost byl jako služba, což už v nové verzi nette presentery jsou nebo se pletu?
- Pavel Kravčík
- Člen | 1196
Já si občas registruju presenter jako službu a tahám si do něj config parametry – takže ano mělo by to jít.
- Tomáš Votruba
- Moderator | 1114
Jasně. Zkoušel jsi to? Permissions můžeš kontrolovat třeba na
onStartup()
.
- Tomáš Votruba
- Moderator | 1114
Aha, tak se omlouvám. Mrknul jsem na náš kód a přetěžujeme
metodu checkRequirements()
.
Zřejmě z konvenčních důvodů.
K inspiraci:
// Our/Custom/BasePresenter.php
/**
* @param PresenterComponentReflection|Method $element
*/
public function checkRequirements($element)
{
if ($element instanceof PresenterComponentReflection) {
$this->eventDispatcher->dispatch(
ApplicationEvents::CHECK_REQUIREMENTS,
new PresenterComponentReflectionEvent($element)
);
} elseif ($element instanceof Method) {
$this->eventDispatcher->dispatch(
ApplicationEvents::CHECK_METHOD_REQUIREMENTS,
new MethodReflectionEvent($element)
);
}
}
Takže bych doporučil tento způsob. Případně registrovat presentery manuálně.
Editoval Tomáš Votruba (6. 11. 2015 9:53)
- Oli
- Člen | 1215
@akadlec mě to funguje úplně normálně. Od Nette 2.3 jsou
presentery registrovaný automaticky (jak jsi psal). Pokud máš zaregistrovanej
listener a $onSomething
jako public, tak by to mělo fungovat.
Vypisuju to hlavně proto, že se mě kolikrát stane, že na něco zapomenu
(typicky public property)
- akadlec
- Člen | 1326
Takže stačí do presenteru udělat $onNeco, pak to zavolat tam kde chcu a Kdyby/Events to odpálí? Protože takto jsem to měl, viděl jsem to i v seznamu v laděnce, ale událost se nezavolala.
Asi ale problém sem měl v tom jak byla ta událost navěšena. Zřejmě bych musel vypsat všechny presentery že? Protože má být na všech.