Прочитал статью про конфиг, основная идея – делать конфиг, который не придется менять на локальном компе и на хостинге. В зависимости от того, где запущен сайт будут использоваться специфичные настройки. К сожалению, ссылка не сохранилась, повторно найти не смог. Решил реализовать это наследуя Zend_Config_Xml.
Используя эту идею, конфиг будет выглядеть примерно так:
Конфигурация base общая для любых условий, чтоб использовать ее, в других конфигурациях она указывается через атрибут extends, этот стандартный способ, который реализуется в Zend_Config_Xml. Атрибут xmlns указывает адрес, для которого будет применяться уже своя конфигурация.
Вот сам класс:
Используя эту идею, конфиг будет выглядеть примерно так:
<?xml version=«1.0» encoding=«UTF-8»?>
<config>
<base>
<models>
<account>Model_Account</account>
</models>
<database>
<adapter>Pdo_Mysql</adapter>
</database>
<site>
<server></server>
<root></root>
<language>ru</language>
<timezone>Europe/Moscow</timezone>
</site>
<debug>4</debug>
</base>
<configuration xmlns=«localhost» name=«Home» extends=«base»>
<database>
<params>
<host>localhost</host>
<dbname>mydb</dbname>
<username>root</username>
<password></password>
</params>
</database>
</configuration>
<configuration xmlns=«mysite.com» name=«Hosting» extends=«base»>
<database>
<params>
<host>localhost</host>
<dbname>mysiteDb</dbname>
<username>dbUser</username>
<password>siteDbPassword</password>
</params>
</database>
</configuration>
</config>* This source code was highlighted with Source Code Highlighter.
Конфигурация base общая для любых условий, чтоб использовать ее, в других конфигурациях она указывается через атрибут extends, этот стандартный способ, который реализуется в Zend_Config_Xml. Атрибут xmlns указывает адрес, для которого будет применяться уже своя конфигурация.
Вот сам класс:
<?php
/**
*
* @package Mego
* copyright Copyright © 2006-2008 Alexey Prokhorov
* version 1.0.0.1
*/
/**
* see Zend_Config
*/
require_once 'Zend/Config.php';
/**
* @category Mego
* @package Zend_Config
* copyright Copyright © 2006-2008 Alexey Prokhorov
* version 1.0.0.1
* @throws Zend_Config_Exception
*/
class Mego_Config_Xml extends Zend_Config_Xml
{
/**
* Загружает данные из XML файла.
*
* Расширяет возможности Zend_Config_Xml, добавляя поддержку XML неймспейсов.
* Удобно для разных доменных имен
*
* param string $file
* param string $namespace XML Неймспейс
* param bool $allowModifications
* @throws Zend_Config_Exception
*/
public function __construct($file, $namespace = null, $allowModifications = false)
{
if (empty($file)) {
/**
* see Zend_Config_Exception
*/
require_once 'Zend/Config/Exception.php';
throw new Zend_Config_Exception('Filename is not set');
}
$config = $baseConfig = array();
$baseXml = simplexml_load_file($file);
if ($namespace) {
$xml = $baseXml->children($namespace);
$attrib = $xml->attributes();
if (isset($attrib['extends'])) {
$extends = (string) $attrib['extends'];
$baseConfig = $this->_processExtends($baseXml, $extends);
}
if (isset($attrib['name'])) {
$baseConfig['cfgName'] = (string) $attrib['name'];
}
$xml = $xml->children();
} else {
$xml = $baseXml;
}
foreach ($xml as $k => $v) {
$config[$k] = $this->_processExtends($xml, $k);
}
if (isset($baseConfig)) {
$config = $this->_arrayMergeRecursive($baseConfig, $config);
}
$this->_allowModifications = $allowModifications;
$this->_loadedSection = null;
$this->_index = 0;
$this->_data = array();
foreach ($config as $key => $value) {
if (is_array($value)) {
$this->_data[$key] = new Zend_Config($value, $this->_allowModifications);
} else {
$this->_data[$key] = $value;
}
}
$this->_count = count($this->_data);
}
}
* This source code was highlighted with Source Code Highlighter.