CakePHP - 基于URL的数据库配置

时间:2011-06-17 07:47:16

标签: cakephp

CakePHP中基于环境使用多个数据库配置的最佳方法是什么?

说我有一个staging,prod和dev服务器。

谢谢你,
三通

2 个答案:

答案 0 :(得分:19)

您可以在构造函数中进行设置。

class DATABASE_CONFIG {

    var $live = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => 'mysql.live.com',
        'login' => 'root',
        'password' => '',
        'database' => '',
        'prefix' => '',
    );

   var $default = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'root',
        'password' => '',
        'database' => '',
        'prefix' => '',
    );


        public function __construct() {
        if (isset($_SERVER) && isset($_SERVER['SERVER_NAME'])) {
            if (strpos($_SERVER['SERVER_NAME'], 'localhost') === false) {
                $this->default  = $this->live;
            }       
        }
    }
}

这基本上会根据您的位置切换配置。

答案 1 :(得分:5)

我得到了这个(我的开发域以'.dev'结尾);

在Bootstrap.php中

define('IS_LIVE',!(strpos($_SERVER['SERVER_NAME'], 'dev') !== false));

在database.php中

<?php
class DATABASE_CONFIG
{
    var $default = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => '127.0.0.1',
        'login' => 'xxxx',
        'password' => 'xxxx',
        'database' => 'xxxx',
        'prefix' => '',
    );

    var $production = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => '127.0.0.1',
        'login' => 'xxx',
        'password' => 'xxx',
        'database' => 'xxxx',
        'prefix' => '',
    );

    function __construct()
    {
        if (IS_LIVE) {
            $this->default = $this->production;
        } else {
            $this->default = $this->default;
        }
    }
}