jak nastavit výchozí mapovací pravidlo

webman
Člen | 15
+
0
-

Píši aplikaci, která využívá "virtuální presentery”. Potřebuji v některých modulech nastavit výchozí presenter, který se načte, pokud třída požadovaného prezenteru nebyla nalezena – nejedná se ale o chybu. Případnou 404 by vyhodil teprve tento presenter. Mapovací pravidla ale umožňují jen jedno pravidlo “*”, jinak se vyvolá chyba.

Alternativní řešení by bylo nastavit na pevno prezenter, který se vždy načte (to můžu udělat v routingu), řekněme jakýsi „subrouter“, a pak udělat nějak redirect na zvolený prezenter (normální nebo univerzální), ale to mi nepřijde moc jako čisté řešení. Minimálně to bude aplikaci zbytečně zpomalovat. Řešení na úrovni mappingu by mi přislo o dost čistí.

Je nějaký způsob jak to vyřešit?

Předem díky za radu

Šaman
Člen | 2659
+
0
-

Myslím že jsem něco podobného řešil v ErrorPresenteru. Tam jsem vyhodnotil chybu a případně přesměroval.

Edit: teď jsem to zkoušel a funguje to v produkčním režimu. V ladicím režimu se zobrazí Tracy, protože v PresenterFactory došlo k neošetřenému vyvolání výjimky Nette\Application\InvalidPresenterException.

Editoval Šaman (19. 7. 2021 12:42)

webman
Člen | 15
+
+1
-

To mě napadlo, ale právě kvůli tomu, že jde to přes vyjímku, i když to není chyba, tak jsem to zavrhnul.

Martk
Člen | 661
+
0
-

Asi vlastní presenter factory https://github.com/…rFactory.php

webman
Člen | 15
+
0
-

Vlastní presenterFactory bych asi zatím napsat neuměl, ale našel jsem hotové řešení zde s pomocí librette/presenter-factory. Funguje.