Använd INI-filer med Zend Framework och PHP

Häromdagen läste jag Baronens blogg om INI-filer och PHP så jag tänkte dela med mig av hur jag använder dessa i mina projekt. I det stora hela gör vi på samma sätt men några skillnader finns.

Eftersom jag använder Zend Framework för att implementera MVC använder mig av den inbyggda klassen Zend_Config_Ini som läser från min INI-fil. Zend_Config_Ini använder sig av parse_ini_file som är en funktion i PHP. Min INI-fil har två sektioner, en för utveckling och en för produktion. Det fina med denna uppsättning är att sektionen ”development” kan ärva från sektionen ”production” så i ”development” behöver man bara specificera skillnaden mellan dem. Så här kan en INI-fil se ut.


; Production site configuration data
[production]
webhost                  = www.example.com
database.adapter         = pdo_mysql
database.params.host     = db.example.com
database.params.username = dbuser
database.params.password = secret
database.params.dbname   = dbname

; Development site configuration data inherits from production and overrides values as necessary
[development : production]
database.params.host     = dev.example.com
database.params.username = devuser
database.params.password = devsecret

I min bootstrap-fil har jag definierat min INI-fil så att jag genom hela applikationen kommer åt mina inställningar. Så här kan det se ut.

$configFile = 'config.ini';

$configSection = '';
if (isset($_SERVER['APP_CONFIG_SECTION'])){
$configSection = basename($_SERVER['APP_CONFIG_SECTION']);
}

if (strlen($configSection) == 0){
$configSection = 'production';
}

$config = new Zend_Config_Ini('../' . $configFile, $configSection);
Zend_Registry::set('config', $config);

Som ni kan se så kontrollerar jag om systemvariabeln $_SERVER[‘APP_CONFIG_SECTION’] är satt vilket jag bara har gjort på min utvecklingsserver. Detta är för att applikationen själv ska veta om den ligger på utvecklingsservern eller om den ligger på produktionsservern. Genom att göra på detta sätt behöver jag bara en INI-fil och jag behöver aldrig fundera över om jag läser från rätt INI-fil.

När jag sedan vill använda något värde från min config.ini så behövs endast följande kod:

$config = Zend_Registry::get('config');
echo $config->database->params->username;

Det här inlägget postades i Allmänt. Bokmärk permalänken.

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *