Jak si nejlépe předat data z configu v modulární aplikaci?

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

Ahoj,
jaký je best practice pro předání dat z configu v modulární aplikaci? Když jsem nepoužíval moduly (jen front a admin module), tak jsem měl třídu AppSettings, které jsem předal hodnoty z

parameters:
	appSettings:
		# ...

Myšlenka je taková, že: Mám základ společnej pro celou aplikaci. Tady bych chtěl nějaký základní defaultní nastavení celé aplikace. Každej modul by potom měl svoje vlastní nastavení, s tím, že pokud by nebylo řečeno (napsáno) jinak, tak by se použili ty nadřazené defaultní hodnoty.

Abych uvedl nějaký konkrétní příklad, tak aplikace bude mít například nastavení

  • autora (jestli se bude/nebude vypisovat autor u jednotlivých příspěvků a jaký bude zdroj dat)
  • počet příspěvků na stránce

a moduly budou články, statické stránky, novinky.

V defaultní aplikaci nastavíme, že chceme uvádět autora jako usera aplikace a počet příspěvků na stránku bude 20. To se předá i těm modulům a oni to mohou přepsat. Takže by to mohlo vypadat nějak takhle:

články:
	author: author // zdroj dat se přepíše na tabulku/entitu author
	// počet příspěvků je default
	nejčtenější: 3 // nastavení, které není v defaultu vubec a je tedy jen pro modul články
statické stránky:
	author: null // statické stránky nemají autora. V jiném sestavení se s autorem může pracovat, proto se předává
	// počet příspěvků na stránku se do tohodle modulu vůbec nepředává
novinky:
	// author je default
	// počet příspěvků je default

A teď teda k otázce: Jak si to nejlépe předat těm jednotlivým modulům, tak aby byla posloupnost: default aplikace → default modulu → nastavení v presenteru/modelu/komponentě

Napadá mě mít nějakou třídu, klidně AppSettings a ArticleSettings. ArticleSettings by si podědil tu AppSettings a přijmul by svoje defaultní nastavení z configu, které by přepsalo to defaultní nastavení aplikace. To by šlo ještě změnit, pokud bych potřeboval vypsat v modulu články třeba jen 5 nejčtenějších na stránku, tak bych si zavolal něco jako:

$this->articleSettings->setMostRead(3);

Je tohle dobrý postup?

Snad jsem to popsal aspoň trochu pochopitelně…

Oli
Člen | 1215
+
0
-

S tagama jsem nikdy nepracoval, takže nevím jestli to „jsou registrovaný jako služby s tagem“ je nějak nutný. Btw. nebyla by špatná přednáška, kucharka, rozvedení v dokumentaci na co ty tagy jsou a jak se daji vyuzit :-)

Ale ani mě nepřijde, že to je stejnej problém. Ty tam máš nastavení každého modulu separátně a v db (ale to asi není podstatný), já chci jedno nastavení, které se může na 2 úrovních přepsat. Nebo jsem něco přehlédl?

Jakej má prosím postup, kterej popisuješ v tom vlákně výhody oproti tomu co jsem navrhl já? Na první pohled se mě to zdá složitější.

Díky

akadlec
Člen | 1326
+
0
-

Hele já jsem to zatím vyřešil tak že mám udělanou Config službu která naloaduje potřebná nastavení a jednotlivé moduly si do ní své nastavení přidávají. Pokud je potřeba aby modul měl přístup k té konfuguraci tak si ji proste injectne či vloží přes konstruktor.

Oli
Člen | 1215
+
0
-

Jasně, to je asi to samé, jak to chci řešit já. Takže to asi nebude úplně bad practice ;-)