CakePHP-基于URL的数据库配置

CakePHP-基于URL的数据库配置,cakephp,Cakephp,在CakePHP中,基于环境使用多个数据库配置的最佳方式是什么 假设我有一个staging、prod和dev服务器 谢谢你, Tee您可以在构造函数中设置它 class DATABASE_CONFIG { var $live = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'mysql.live.com', 'login' =&

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

假设我有一个staging、prod和dev服务器

谢谢你,

Tee

您可以在构造函数中设置它

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;
            }       
        }
    }
}
这将基本上根据您所在的位置切换您的配置

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

Bootstrap.php中的

define('IS_LIVE',!(strpos($_SERVER['SERVER_NAME'], 'dev') !== false));
<?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;
        }
    }
}
在database.php中

define('IS_LIVE',!(strpos($_SERVER['SERVER_NAME'], 'dev') !== false));
<?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;
        }
    }
}

在cake 1.3中,它不起作用。Cake返回sql错误“sql错误:1064:您的sql语法有错误”;我发现了这篇很棒的文章,它提供了一种非常健壮的方法来设置这种基于环境管理DB配置文件的方法: