Podpora načítání více konfiguračních souborů
- VeN
- Člen | 46
Ahoj,
vím, že se na fóru již několikrát řešil požadavek na možnost načítání více konfiguračních souborů. Zajímalo by mě, zda je reálné, aby pro to v blízké době byla podpora přímo v Nette. Aby byla zachována zpětná kompatibilita, tak bych si představoval, že by mohla vzniknout nová metoda, která by přidávala další konfiguraci k té, která se načetla zavoláním
Nová metoda by třeba mohla být takováto:
Jaký na tuto věc panuje názor?
- VeN
- Člen | 46
Z toho co David napsal
ad Environment a konfigurace: to nechme na další vlákno.
jsem pochopil, že na to chce založit jiné vlákno, tak jsem ho založil.
Z mého pohledu se mi zdá, že načtení více souborů se týká spíše Environmentu, než samostatné třídy \Nette\Config\Config, přes kterou to lze vyřešit poměrně dobrým workaroundem https://forum.nette.org/…nich-souboru#…
- Jan Tvrdík
- Nette guru | 2595
Use case
Na projektu pracuje 5 vývojářů. Kromě toho existuje testovací a produkční server. Celkem tedy 7 různých prostředí. Každé prostředí má jiné cesty, jiné přihlašovací údaje do DB a běží na jiné doméně, takže je potřeba i různý Google Maps API klíč.
Jako nejvhodnější se ukázalo vytvořit kromě hlavního
config.neon
ještě config.local.neon
, který bude
zahrnut v .gitignore
.
Realizace v současnosti a její problémy
Problémy
- Nelze přepsat již nastartovanou službu (autorunem).
- Generují se a následně načítají zbytečně 2 soubory. Přepsané parametry a služby se navíc vyskytují 2×.
Návrh řešení
Upravit metodu loadConfig
tak, aby uměla zpracovat více
souborů. (Přejmenovat na loadConfigs
?). Je potřeba mergnout tu
konfiguraci před tím, než bude aplikovaná. Funkce
array_merge_recursive
se ukázala být nepoužitelnou, protože
nepřepisuje, ale připisuje.
Nakonec jsem to spojení vyřešil pomocí metody
Nette\Utils\Arrays::mergeTree
:
Související vlákna
- Refactoring Environment & Configuration (17. 5. 2011)
- Načtení více konfiguračních souborů (26. 9. 2009)
- Nette\Environment (18. 6. 2009)
- Lopo
- Člen | 277
Jan Tvrdík napsal(a):
Čímž imho neřešíš ani jeden ze dvou výše zmíněných problémů.
to ze sa kazdy config vygeneruje do samostatneho php podla mna neni nejak problem … ale mozno by to chcelo nejakym sposobom ovplyvnit ci sa tak ma diat alebo vyplut nakonec vysledok …
prepisanie sluzieb – to som zatial netestoval
ono predsa len ten moj postup je uz starsieho datumu, mam dojem ze odkedy je neon
- Jan Tvrdík
- Nette guru | 2595
mkoubik wrote: Jak řešíte ty routy?
routes.local.php
? Teď jsem na ten problém taky narazil.
Na jaký? Já na něj asi ještě nenarazil :) Ale pokud existuje, tak
routes.local.php
bude použitelné řešení.
- Ondřej Mirtes
- Člen | 1536
Routy by na prostředí měly být nezávislé. Pokud do nich potřebuji
zahrnout i doménu (tedy absolutní cesta se vzorem začínajícím na
//
), tak to řeším řádkem v configu.
- Vojtěch Dobeš
- Gold Partner | 1316
Nebylo by lepší, kdyby současná metoda loadConfig
uměla
přijímat jako první argument i pole souborů? To config
je
stejně takové neurčité slovo a loadConfigs
mi zrovna neevokuje
„načtení z více konfiguračních souborů“.
- pekelnik
- Člen | 462
Podpora pro více konfiguračních souborů: https://forum.nette.org/…tani-konfigu#…