Mapování samostatných presenterů
- m.brecher
- Generous Backer | 889
Ahoj,
Zkouším si přehledněji organizovat soubory presenterů, šablon, komponent, factory pro komponenty a trait. Jako nejpřehlednější mě pro projekt bez modulů přijde toto řešení:
Aby uměl Nette presenter správně dohledat šablony akcí a layoutů, je potřeba přepsat příslušné metody Nette\Application\UI\Presenter, což není žádný problém.
Presentery a jejich jednoúčelové komponenty a šablony pak máme pěkně pohromadě v presenterových adresářích:
Mapování presenterů mám vyřešené takto:
Přehlednost bohužel narušují presentery, které nepatří do business logiky aplikace – typicky ErrorPresenter a několik Error4xxPresenterů. Ty bych rád namapoval do jedné společné složky /Error takto:
Potřeboval bych tedy mapovat jednotlivé presentery samostatně, třeba nějak takhle:
Dokumentace Nette neuvádí žádnou takovou možnost tak předpokládám, že by se na to použilo nějaké extension pro Application ?? Napsat si vlastní PresenterFactory ??
Díky předem za jakékoliv rady a tipy jak tohle vyřešit.
Editoval m.brecher (8. 10. 2023 15:36)
- Marek Bartoš
- Nette Blogger | 1297
Mapování konkrétních presenterů se dá udělat a mám ho udělané tady (není to stable release, takže dokumentace trochu pokulhává, ale funguje to) To ale imho vůbec nepotřebuješ – je to zamýšlené spíš pro přetěžování presenterů.
Tobě by stačil mapping, který kopíruje namespace
1:1 *: ['', *, *\*Presenter]
Editoval Marek Bartoš (9. 10. 2023 16:40)
- m.brecher
- Generous Backer | 889
@MarekBartoš
Tobě by stačil mapping, který kopíruje namespace 1:1 *: ['', *, *\*Presenter]
Díky za tip.
Mapping 1 : 1 jak navrhuješ ale seskupí presentery do podsložky pomocí nového modulu. Já potřebuji mít možnost ve složce jednoho modulu umístit presentery obecným pravidlem do složek samostatně 1 : 1 (presenter : složka), a pomocí specifického pravidla některé presentery seskupit do jedné společné podsložky, ale neměnit modul, modul bude buďto žádný, nebo společný.
Je to analogie jako když máš obrázky ve složce /css/images, ale jedna skupina obrázků, která je specifická se umístí do samostatné podsložky /css/images/icons, aby se soubory zpřehlednily .
Editoval m.brecher (9. 10. 2023 17:54)
- Marek Bartoš
- Nette Blogger | 1297
Moduly nepotřebuješ, zapomeň na to že Nette moduly existují.
Routy si rozepíšeš pro jednotlivé presentery, místo modulu v kódu
můžeš kontrolovat společný interface nebo předka.
A App:Feature:Foo
se ti přemapuje na
App\Feature\Foo\FooPresenter
Případně s *: ['', *, *Presenter]
se ti přemapuje
na App\Feature\FooPresenter
- m.brecher
- Generous Backer | 889
@MarekBartoš
Routy si rozepíšeš pro jednotlivé presentery
Nejde o routy, jde o umístění souborů presenterů a jejich mapování, ještě to zopakuji:
Mapování mám pomocí obecného pravidla takto:
no a potřeboval bych pro konkrétní presentery přidat specifická pravidla nějak takto:
což v současném Nette nejde, protože se dají přidat specifická pravidla pouze pro jednotlivé moduly, nikoliv presentery.
Potom by názvy tříd presenterů byly následující:
Teď mě napadlo, že když nedodržím PSR-4 doporučení pro adresářovou strukturu projektu, tak jednoduše soubory presenterů s názvy tříd mapovaných obecným pravidlem umístím do společného adresáře /Presenters/Error a mám to vyřešené :):
Lepší by ale bylo upravit mapování tak, aby se PSR-4 doporučení mohlo dodržet.
Teď to vypadá, že to nepůjde jinak, než nějakou úpravou v Nette Application, jenom nevím kudy začít + otázka zda to stojí za tu námahu.
Editoval m.brecher (9. 10. 2023 19:38)