Created
April 2, 2012 22:12
-
-
Save JulienBreux/2287568 to your computer and use it in GitHub Desktop.
PrestaShop 1.5.x - Database Factory
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Database Factory | |
* Use this factory for connections to external databases | |
* | |
* @version 1.0.0 | |
* @author Julien BREUX <[email protected]> | |
*/ | |
class DbFactoryCore | |
{ | |
/** @const string Default adapter */ | |
const DEFAULT_ADAPTER = 'MySQL'; | |
/** @var array Instances */ | |
protected static $_instances = array(); | |
/** @var array List of servers settings */ | |
protected static $_servers = array(); | |
/** | |
* Dynamic add server | |
* | |
* @static | |
* @param $server_name string Alias name of server | |
* @param $host string Host (e.g. localhost) | |
* @param $user string User (e.g. root) | |
* @param $password string Password | |
* @param $database string Database (e.g. prestashop) | |
* @param string $adapter Adapter (e.g. MySQL, MySQLi, PDO, etc.) | |
*/ | |
public static function addServer($server_name, $host, $user, $password, $database, $adapter = self::DEFAULT_ADAPTER) | |
{ | |
self::$_servers[$server_name] = (object)array( | |
'host' => $host, | |
'user' => $user, | |
'password' => $password, | |
'database' => $database, | |
'adapter' => $adapter, | |
); | |
} | |
/** | |
* Get Instance By Server | |
* | |
* @static | |
* @param $server_name string Alias name of server | |
* @return mixed | |
* @throws DbFactoryException | |
*/ | |
public static function getInstanceByServer($server_name) | |
{ | |
if (!array_key_exists($server_name, self::$_servers)) | |
throw new DbFactoryServerNotSetException(sprtinf('The server %s is not set', $server_name)); | |
$class = self::$_servers[$server_name]->adapter; | |
if (!array_key_exists($server_name, self::$_instances)) | |
self::$_instances[$server_name] = new $class( | |
self::$_servers[$server_name]->host, | |
self::$_servers[$server_name]->user, | |
self::$_servers[$server_name]->password, | |
self::$_servers[$server_name]->database | |
); | |
return self::$_instances[$server_name]; | |
} | |
} | |
/** | |
* Database Factory Exception | |
* Server Not Set | |
* | |
* @author Julien Breux <[email protected]> | |
* @version 1.0.0 | |
*/ | |
class DbFactoryServerNotSetException extends Exception {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
require dirname(__FILE__).'/config/config.inc.php'; | |
// Add externals servers | |
DbFactory::addServer('primary', 'host_1', 'user_1', '****', 'database_1'); | |
DbFactory::addServer('secondary', 'host_2', 'user_2', '****', 'database_2'); | |
DbFactory::addServer('tertiary', 'host_3', 'user_3', '****', 'database_3'); | |
DbFactory::addServer('quaternary', 'host_4', 'user_4', '****', 'database_4'); | |
// ... | |
// Primary instance | |
$primary = DbFactory::getInstanceByServer('primary'); | |
// Secondary instance | |
$secondary = DbFactory::getInstanceByServer('secondary'); | |
// Tertiary instance | |
$tertiary = DbFactory::getInstanceByServer('tertiary'); | |
// Quaternary instance | |
$quaternary = DbFactory::getInstanceByServer('quaternary'); | |
// ... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment