Skip to content

Instantly share code, notes, and snippets.

@hkurosawa
Last active August 29, 2015 14:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hkurosawa/33333ed1dd94140bf9a3 to your computer and use it in GitHub Desktop.
Save hkurosawa/33333ed1dd94140bf9a3 to your computer and use it in GitHub Desktop.
CakePHP 2.x database.php file to switch between database configuration settings based on file existence under app/Config directory
<?php
// CakePHP 2.x database.php file to switch between database configuration settings based on file existence under app/Config directory
/**
* This is core configuration file.
*
* Use it to configure core behaviour of Cake.
*
* PHP 5
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP(tm) Project
* @package app.Config
* @since CakePHP(tm) v 0.2.9
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*
* Database configuration class.
* You can specify multiple configurations for production, development and testing.
*
* datasource => The name of a supported datasource; valid options are as follows:
* Database/Mysql - MySQL 4 & 5,
* Database/Sqlite - SQLite (PHP5 only),
* Database/Postgres - PostgreSQL 7 and higher,
* Database/Sqlserver - Microsoft SQL Server 2005 and higher
*
* You can add custom database datasources (or override existing datasources) by adding the
* appropriate file to app/Model/Datasource/Database. Datasources should be named 'MyDatasource.php',
*
*
* persistent => true / false
* Determines whether or not the database should use a persistent connection
*
* host =>
* the host you connect to the database. To add a socket or port number, use 'port' => #
*
* prefix =>
* Uses the given prefix for all the tables in this database. This setting can be overridden
* on a per-table basis with the Model::$tablePrefix property.
*
* schema =>
* For Postgres/Sqlserver specifies which schema you would like to use the tables in. Postgres defaults to 'public'. For Sqlserver, it defaults to empty and use
* the connected user's default schema (typically 'dbo').
*
* encoding =>
* For MySQL, Postgres specifies the character encoding to use when connecting to the
* database. Uses database default not specified.
*
* unix_socket =>
* For MySQL to connect via socket specify the `unix_socket` parameter instead of `host` and `port`
*/
class DATABASE_CONFIG {
public $default = null;
public $dev = array(
//put database config here
);
public $test = array(
//put database config here
);
public $prod = array(
//put database config here
);
public function __construct(){
App::uses('Folder', 'Utility');
//if file named USE_DATABASE_CONFIG_name exists, use DATABASE_CONFIG.name as default config
//if multiple USE_DATABASE_CONFIG_* files found, use the first one.
$dir_path = ROOT . DS . APP_DIR . DS . 'Config' . DS;
$dir = new Folder($dir_path);
$f = $dir->find('USE_DATABASE_CONFIG_.*', true);
if (count($f)<=0) {
//using default(dev) setting if USE_DATABASE_CONFIG_* is not found.
$this->default = $this->dev;
return;
} else {
//using default(dev) setting if USE_DATABASE_CONFIG_* is not found.
//fetch config name
ereg('USE_DATABASE_CONFIG_(.*)', $f[0], $ret);
$config_name = $ret[1];
if (isset($this->{$config_name})) {
$this->default = $this->{$config_name};
} else {
//use default(dev) configuration if accoumpanied configuration is not found
$this->default = $this->dev;
}
return;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment