Nastavení v configu, kde se mají presentery hledat

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Oli
Člen | 1215
+
0
-

Vím, že se od verze (tuším) 2.3 automaticky registrují presentery do DIC. Tohle chování je možné změnit a zaregistrovat si všechny presentery, které potřebuji ručně.

Je ale možné určit adresáře ve kterých se mají presentery hledat?
Mějme adresářovou strukturu například

- AdminModule
	- ArticleModule
	- UserModule
	- GalleryModule

A teď bych chtěl (třeba proto, že galleryModule ještě není hotový) hledat presentery jen v ArticleModule a UserModule. Jde to nějak?

Proč by se to hodilo?

Mám jednotlivé moduly jako balíčky, které stahuji pomocí composeru. Pokud pro daný projekt modul není potřeba, tak ho vubec nestahuju. Všechny moduly obsahují základní presenter, ze kterého se poté vychází v projektu. Pokud není potřeba nic speciálního, tak se v app/AdminModule/ArticleModule/presenters/ArticlePresenter.php použije jen

class ArticlePresenter extends DefaultArticlePresenter
{

}

Zde je právě kámen úrazu. Pokud balíček není potřeba, tak DefaultArticlePresenter chybí a musím ho vytvořit „jen aby byl“. Pokud by jsem mohl někde v configu nastavit, že se nemá hledat presenter ve složce ArticleModule, tak by odpadl tenhle debilní workaround…

David Matějka
Moderator | 6445
+
+1
-

muzes pouzit konfiguracni moznost scanDirs, ale je nutne zabranit mergovani s tou stavajici hodnotou:

application:
	scanDirs!: [foo, bar]

Ale proc mas v projektu ten ArticlePresenter?

btw, ja mam treba pro vyvoj to scanovani uplne vypnuty, aby to pri kazde zmene presenteru negenerovalo konejner – ale az se mergne tenhle super PR, tak to ani nebude potreba

Oli
Člen | 1215
+
0
-

To vypadá jako přesně to co potřebuju, díky :-)

Ještě otázka, jde to nějak zaregistrovat z extension? Něco jako, že by každej modul (kterej je zároveň extension) měl v sobě právě tohle zahrnutí do scanDirs.

Ale proc mas v projektu ten ArticlePresenter?

Z lenosti. Projekt začínám na nějakém vlastním skletonu, který obsahuje mimojiné tyhle prázdné presentery a po stáhnutí + přidání do sekce extensions bych byl rád, kdyby se daný modul oživil. Navíc pokud bych to načítal přímo z vendoru, tak bych musel verzovat případné změny přímo u modulu. Myšlenka tohohle systému je zhruba:

  • Základní použití modulu → použije se ArticlePresenter extends DefaultArticlePresenter {}
  • Modifikované použití → viz předchozí + přetížení některé z metod, které jsou specifické pro daný projekt
  • Speciální použití → ArticlePresenter vůbec nedědí od DefaultArticlePresenteru, ale od FrontendPresenteru.
David Matějka
Moderator | 6445
+
0
-

Ještě otázka, jde to nějak zaregistrovat z extension?

bohuzel nikoliv

Oli
Člen | 1215
+
0
-

Asi pořád ještě nemůžu upravovat scanDirs z extension, že? Neplánuje se třeba něco jako má Kdyby https://github.com/…Provider.php