Ziskání všech presenterů a action

Fires
Člen | 89
+
+1
-

Zdravím, lze nějak z nette vytáhnout všechny presentery a jejich actions ? Nebo to už z podstaty není možné a musel by se napsat nejaký finder co projde soubory presenter a vytahá z nich (přes regexp ) název presenteru a jeho definované actions ?

David Matějka
Moderator | 6445
+
+1
-

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
+
0
-

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
+
0
-

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
+
0
-

@duke match nekontroluje existenci presenteru, bylo by nutne to zkombinovat s presenter factory a chytat InvalidPresenterException

duke
Člen | 650
+
0
-

David Matějka napsal:

@duke match nekontroluje existenci presenteru, bylo by nutne to zkombinovat s presenter factory a chytat InvalidPresenterException

Nereagoval jsem ohledně kontroly existence presenteru, ale kontroly, zda je url obsazené (nějakým presenterem).

David Matějka
Moderator | 6445
+
+2
-

@duke pokud mas catch all routu <presenter>/<action>, tak ti router vrati request i pro foo/bar, takze ti to s obsazenosti moc nepomuze