Ziskání všech presenterů a action
- David Matějka
- Moderator | 6445
ahoj, nette registruje vsechny* presentery v DI kontejneru, takze muzes pres
findByType
metodu vsechny presentery (tzn typ Nette\Application\UI\Presenter
).
Na nich pak budes uz muset vylistovat metody pres reflexi a najit action/render
metody (ktere vsak ani nemusi existovat, takze bys jeste musel hledat
sablony)
- * nette sice by default registruje vsechny, ale necha se to ruzne nakonfigurovat, takze neni garantovane, ze ho opravdu uvidi.
pokud bys chtel vlastni implementaci, muzes se inspirovat v tom, jak je nette dohledava pro DIC: https://api.nette.org/…ion.php.html#123
ale nakonec se jeste zeptam, k cemu to vlastne potrebujes?
- andros
- Člen | 145
A já si vždycky myslel že „vytažení“ všech presenterů je naprostá běžná věc, kterou dělá každý, na každém druhém webu :) Podle několika příspěvků z poslední doby zde na foru to asi bude trošku jinak :)
Například budu mít nějaký PagePresenter, který bude načítat stránky z databáze. Routování budu mít udělané www.example.com/nejaka-stranka. Takže si musím dát pozor, abych nevytvořil stránku se stejným názvem jako je nějaký presenter.
Proto jsem si myslel že nejlepší řešení bude vytahnout všechny presentery, render metody a sestavit seznam „zakázaných“ názvů stránek. Asi to nebude nejrychlejší řešení, tím by byl nějaký seznam zakázaných názvů. Na druhou stránu, když přidám nový presenter, nemusím v prvním případě přemýšlet nad tím, že jeho název musím vložit do nějaké tabulky.
A teď si říkám, že pro tenhle případ bude asi nejlepší použít funkci class_exists a otestovat si , zda třída existuje, nebo ne :)
Editoval andros (9. 10. 2017 16:37)
- duke
- Člen | 650
andros napsal(a):
Například budu mít nějaký PagePresenter, který bude načítat stránky z databáze. Routování budu mít udělané www.example.com/nejaka-stranka. Takže si musím dát pozor, abych nevytvořil stránku se stejným názvem jako je nějaký presenter.
Proto jsem si myslel že nejlepší řešení bude vytahnout všechny presentery, render metody a sestavit seznam „zakázaných“ názvů stránek. Asi to nebude nejrychlejší řešení, tím by byl nějaký seznam zakázaných názvů. Na druhou stránu, když přidám nový presenter, nemusím v prvním případě přemýšlet nad tím, že jeho název musím vložit do nějaké tabulky.
A teď si říkám, že pro tenhle případ bude asi nejlepší použít funkci class_exists a otestovat si , zda třída existuje, nebo ne :)
Nebude lepší využít metodu routeru match?
Tj. vyzkoušet, co vrací pro dané url, a podle toho určit, zda je obsazené
či nikoli…
Asi to není úplně univerzální řešení, ale pokud nemáš definované nějaké šílené routy, tak by to mohlo stačit.
- David Matějka
- Moderator | 6445
@duke match nekontroluje existenci presenteru, bylo by nutne to zkombinovat s presenter factory a chytat InvalidPresenterException
- David Matějka
- Moderator | 6445
@duke pokud mas catch all routu
<presenter>/<action>
, tak ti router vrati request
i pro foo/bar
, takze ti to s obsazenosti moc nepomuze