Třída Jet\Config

Po té co jste se již seznámili s principem subsystému konfigurace a také s problematikou definic konfigurace je na čase "mrknout" na třídu Jet\Config, která je ústředním bodem celého subsystému.

Třída následující role:

  • Je to rodičovská třída všech definic konfigurací - ty od ní musí dědit.
  • Je výchozím bodem pro práci se definicemi konfigurace.
  • Stará se o načítání, sestavování a ukládání konfiguračních dat z a do souborů.

Obecné metody

Metoda Význam
public static setBeTolerant(
bool $be_tolerant
): void
Tato statická metoda zapíná (vypíná) tolerantní režim konfigurace. Co to znamená? Když se konfigurace načítá při běžném chodu aplikace, tak se provádí základní kontrola. Tedy konfigurace (konfigurační soubor) musí existovat, povinné konfigurační hodnoty musí být nastaveny. Pokud tyto podmínky nejsou splněny, pak je vyhozena výjimka a běh aplikace je tím ukončen - dojde k závažné chybě. Běh aplikace bez kompletní konfigurace by mohl mít nepříjemné důsledky, proto je to bráno takto striktně.

Ovšem pokud vyvíjíte například instalátor, tak se musí počítat s tím, že konfigurace je neúplná, nebo ještě vůbec neexistuje. Právě k tomu slouží tzv. tolerantní režim, který funguje obecně - pro všechny konfigurační definice a soubory.
public static beTolerant(
): bool
Indikuje zda je / není zapnutý tolerantní režim.

Základní metody

Metoda Význam
public __construct(
?array $data = null
)
Konstruktor samozřejmě inicializuje konfiguraci. Tedy konfigurační data převede na vlastnosti instance dané třídy, inicializuje subsekce a tak dále.

Důležité je jak se chová nepovinný parametr $data. To je pole ve kterém jsou data konfigurace v surové podobě - tedy jako asociované pole. Ovšem běžně v aplikaci tento parametr nepoužijete. Pokud tento parametr vynechán (tak tomu většinou v praxi bude), tak se konfigurace načte z příslušného souboru.

Ovšem může se stát, že budete potřebovat vytvořit ad hoc instanci konfigurace bez načítání dat ze souboru. Příklad? Ad hoc spojení na databázi v nějakém jednoúčelovém servisním skriptu, které jinde nepoužijete. Proto existuje možnost vytvořit instanci konfigurace a přímo předat konfigurační data tímto způsobem.
public setData(
array $data
): void
Viz konstruktor (ten tuto metodu volá). Konfigurační data můžete nastavit ještě jedním způsobem a to pomocí této metody.
public toArray(
): array
Dalo by se říct, že se jedná o reverzní metodu ke konstruktoru a metodě setData. Tedy instanci konfigurace převádí do podoby asociovaného pole.

Práce s definicí konfigurace

Metoda Význam
public getDefinition(
): Config_Definition_Config
Vrátí instanci objekty ktery představuje definici dané konfigurace.
public getPropertiesDefinition(
): Config_Definition_Property[]
Vrátí pole instancí objektů představujících definice jednotlivých konfiguračních parametrů (tedy vlastností dané konfigurační třídy).

Práce s konfiguračním souborem

Metoda Význam
public getConfigFilePath(
): string
Vrátí cestu ke konfiguračnímu souboru. Pokud nebylo metodou setConfigFilePath (viz dále) určeno jinak, pak se cesta k souboru stanoví následovně:
SysConf_Path::getConfig() . $this->getDefinition()->getName() . '.php'
Tedy:
  • Ze systémové konfigurace se převezme cesta k adresáři, který je určen pro ukládání konfiguračních souborů.
  • Název konfigurace určený definicí - tedy atributem 'name' konfigurační třídy se použije jako název PHP souboru.
To tedy například znamená, že konfiguraci DataModel najdete v souboru ~/application/config/data_model.php a má tuto podobu: return [
    
'backend_type' => 'MySQL',
    
'backend_config' => [
        
'connection_read' => 'default',
        
'connection_write' => 'default',
        
'engine' => 'InnoDB',
        
'default_charset' => 'utf8',
        
'collate' => 'utf8_general_ci',
    ],
];
Protože to tak určila třída Jet\DataModel_Config svou definicí: namespace Jet;

#[
Config_Definition(name'data_model')]
class 
DataModel_Config extends Config
{
   
//... ... ...
}


Proč Jet používá pro ukládání konfiguračních hodnot tento způsob a ne nějaký vlastní formát (nebo .ini soubory, XML či podobně) se můžete dočíst zde.
public setConfigFilePath(
string $config_file_path
): void
Někdy je nutné pracovat s konfiguračním souborem, který má nestandardní umístění. Například v rámci nějakého nástroje si potřebujete konfiguraci dočasně "ukládat bokem". Proto je možné dané definici konfigurace vnutit volitelnou absolutní cestu konfiguračního souboru.
public readConfigFileData(
): array
Načte data z konfiguračního souboru v surové podobě. Pokud konfigurace není v tolerantním režimu, tak při jakýchkoliv potížích s načtením dat vyhazuje příslušné výjimky.
public saveConfigFile(
): void
Zapíše konfigurační data do souboru. Pokud dojde k selhání, tak jsou vyhozeny příslušné výjimky a nezabrání tomu ani tolerantní režim. Ten na zápis nemá vliv.

Při vývoji konfiguračních nástrojů je nutné počítat s jakoukoliv výjimkou.
Předchozí kapitola
Definice
Další kapitola
Do hloubky