Konfigurácia v php rubrika: Programování: PHP

2 Ján Štefek
položil/-a 17.7. 16:40
 
upravil/-a 17.7. 18:17

Ahojte,

v php programujem už dosť dlho, ale zatial idem svojou vlastnou cestou - vlastný mini framework (DI, testy) a na ňom postavené CMS. Teda nepoužívam žiadne velké frameworky (Nette/Symfony).

V nich len raz čas čítam zdrojáky, aby som zistil ako vyriešili danú situáciu.

Snažím sa vyriešiť toto:

  • rôzne knižnice majú ako parametre konštruktora konfiguráciu.
  • napr. DB má server/login/pass/dbname, Cache má cestu do temp adresára atď...

Problém je že tieto knižnice môžu mať rozdielne parametre:

  • MySQL databáza má vyššie popísané, SQLite databáza má ako parameter len cestu.
  • súborová cache má ako parameter cestu, Memcached cache má ako parametre server a port...

A teraz, ak chcem v projekte zmeniť základnú súborovú cache za Memcached, musím prejsť kód a na jednom, dvoch miestach upraviť parametre konštruktora.

Jediné čo ma napadlo je dávať ako parameter konštruktora celú konfiguráciu

  $cache = new Cache($config->GetSection('cache')); // GetSection() vráti array('host' => '127.0.0.1', 'port' => 11211)

Podobne by sa to dalo spraviť pre databázu a ostatné objekty.

Toto sa mi ale nezdalo velmi "čisté". Keď som pozeral ako to majú iné frameworky (myslel som že to bude velmi podobne), bol som prekvapený že takmer všade to bolo cez parametre konštruktora:

Neverím že v týchto frameworkoch keď chce človek vymeniť jeden typ cache/databázy za iný s rôznymi parametrami musí meniť kód frameworku, alebo prepisovať svoj kód na X miestach.

Ako toto robíte vy, prípadne je riešenie s objektom ok?

odkaz Vyřešeno
9 Žížala
odpověděl/-a 18.7. 13:17
 
upravil/-a 18.7. 13:20

Zkuste juknout na tohle:
https://www.yiiframework.com/doc/guide/2.0/en/db-dao#creating-db-connect...
https://www.yiiframework.com/doc/guide/2.0/en/caching-data#cache-components
https://github.com/yiisoft/yii2-app-advanced/blob/master/frontend/config...

Osobně s tímhle nemám problém a mám konfiguraci na jednom místě. Respektive mám zvlášť konfiguráky pro DB/Cache/Logy ..., které se pak načítají v jenom velkém konfiguráku.

Komentáře

  • Ján Štefek : Perfektné, toto je presne čo ma zaujímalo. Vždy som pozeral len ako to robí Nette/Symfony a nenapadlo ma pozrieť aj iné fw. 18.7. 18:26
  • Kit : Mám to ve své DB knihovně skoro stejně a je to velmi praktické. Jen ty parametry spojení mám v externím konfiguračním souboru INI, který načítám přes parse_ini_file() a injektuji do DB knihovny. Další variantou, která se hodí pro náročnější konfigurace, je uložení v externím XML. 18.7. 18:44

Pro zobrazení všech 6 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.