Magento用于实时和暂存的不同配置文件

时间:2011-03-31 18:25:25

标签: php magento

是否可以为站点的live,staging和dev版本提供不同的config.xml文件。

我认为应该有一个live.xml,local.xml和staging.xml,这些应该设置一次,然后通过htaccess环境变量或其他东西控制

这可能吗?

1 个答案:

答案 0 :(得分:5)

不,没有任何东西可以支持Magento的开箱即用,并且没有我知道的模块提供此功能。

如果您愿意,可以实施此版本。通过Mage_Core_Model_Config类加载的所有Magento的配置文件都是(或者应该是,不要让我这么做)。

#File: app/code/core/Mage/Core/Model/Config.php
public function loadModulesConfiguration($fileName, $mergeToObject = null, $mergeModel=null)
{
    $disableLocalModules = !$this->_canUseLocalModules();

    if ($mergeToObject === null) {
        $mergeToObject = clone $this->_prototype;
        $mergeToObject->loadString('<config/>');
    }
    if ($mergeModel === null) {
        $mergeModel = clone $this->_prototype;
    }
    $modules = $this->getNode('modules')->children();
    foreach ($modules as $modName=>$module) {
        if ($module->is('active')) {
            if ($disableLocalModules && ('local' === (string)$module->codePool)) {
                continue;
            }
            $configFile = $this->getModuleDir('etc', $modName).DS.$fileName;
            if ($mergeModel->loadFile($configFile)) {
                $mergeToObject->extend($mergeModel, true);
            }
        }
    }
    return $mergeToObject;
}

您可以为此模型创建一个类重写,它将根据环境更改$ filename,然后加载相应的配置文件。

虽然这是一个有趣的想法,但我认为这不是一个好主意。应该在部署级别处理环境差异,并且模块的config.xml文件中不应包含任何特定于环境的信息。环境特定信息保存在一个位置

app/etc/local.xml

您的构建/部署系统应根据您正在部署的环境修改local.xml。