我正在做類似的事情,相同的代碼,但不同的數據庫取決於子域。 我有用於域的表的數據庫,映射「域」到「DBNAME」:
CREATE TABLE IF NOT EXISTS `empresas` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`database` char(10) NOT NULL,
`active` tinyint(1) NOT NULL,
`domain` char(255) NOT NULL
PRIMARY KEY (`id`),
KEY `domain` (`domain`)
) ;
那麼abtract控制器基類,使魔:
<?php
class AB_Base_Controller extends CI_Controller {
public $empresa;
public function __construct() {
parent::__construct();
$this->empresa = $this->session->userdata('empresa');
if ($this->empresa === FALSE || empty($this->empresa)) {
$this->load->model('sistema_model', 'sistema');
$this->empresa = $this->sistema->get_empresa();
$this->session->set_userdata('empresa', $this->empresa);
}
// configure the client database
$db['hostname'] = 'localhost';
$db['username'] = "whatever";
$db['password'] = "whatever";
$db['database'] = 'tqm'.$this->empresa['database']; // the 'tqm' at the beginning is just for make difference with the rest of db
$db['dbdriver'] = 'mysql';
$db['dbprefix'] = '';
$db['pconnect'] = TRUE;
$db['db_debug'] = FALSE; //TRUE;
$db['cache_on'] = FALSE;
$db['cachedir'] = '';
$db['char_set'] = 'iso-8859-1';
$db['dbcollat'] = 'latin1_swedish_ci';
$db['swap_pre'] = '';
$db['autoinit'] = TRUE;
$db['stricton'] = FALSE;
$this->load->database($db, FALSE, TRUE);
}
}
任何控制器,其繼承將配置db。
模型:
<?php if (! defined('BASEPATH')) exit('No direct script access allowed');
// CI 2.0 Compatibility
if(!class_exists('CI_Model')) { class CI_Model extends Model {} }
class Sistema_model extends CI_Model
{
/**
* Contiene el nombre de la tabla en la que se guardan los datos del dominio y la empresa cliente asociada
*
* @var string
**/
public $table = 'empresas';
public function __construct()
{
parent::__construct();
}
/**
* Retorna la empresa basado en los datos de conexión
*
* @return array
**/
public function get_empresa()
{
$query = $this->db->select('id, database')
->where('active', 1)
->where('domain',$_SERVER['SERVER_NAME'])
->get($this->table);
if($query->num_rows() == 0) redirect('http://www.google.com');
$result = $query->first_row('array');
return $result;
}
}
對不起由lenght,但代碼將解釋比我糟糕的英語更好。
感謝您的答案,但我可以使用.htacess做到這一點,因爲我現在擁有一個共享主機並且無法更改服務器的配置 – Peacemoon 2011-06-09 12:00:47
您使用的是什麼主機? – Shauna 2011-06-09 12:35:06
不會設置虛擬主機不能使用CI的base_url?你不需要改變base_url嗎? – zechdc 2011-11-28 22:53:24