大家好我需要使用Codeigniter为多站点提供一些帮助。
所以我正在开发一个多站点系统,不同的公司注册并给他们的子域(例如公司ABC
转到www.system.com
并注册,然后他们被给予子域{{1然后生成数据库abc.system.com
(加密),并由系统创建默认表。
所有公司都使用相同的界面,因此唯一的变化是数据库。
我的想法是每当有人访问abc
我爆炸(abc.system.com)并且我abc.system.com
加密它并且我将abc
中的数据库连接更改为
config/database.php
用户将使用$db['company'] = array(
'database' => 'encrypted(abc)',
但是现在在考虑它时,当其他人碰巧登录$this->db->query
时会发生灾难,因为连接会再次更改为xyz.system.com
,因为他/她也将使用encrypted(xyz)
请记住,系统是唯一的数据库正在发生变化。
我不了解使用$this->db->query
现在我遇到了关于如何绕过它的任何想法? 我正在使用codeigniter 3.
答案 0 :(得分:0)
我可以建议你在MY_Controller类中初始化第二个“公司”数据库,你可以在所有控制器中扩展(也许只有公司相关的那些。
通过CI默认配置,您可以在核心文件夹中创建MY_Conroller,这将扩展CI_Controller,控制器内的任何控制器都可以扩展它。
在这个MY_Controller中,您将能够解析主机(域)并设置正确的数据库.. 示例:
class My_Controller extends CI_Controller {
protected $dbC;
public function __construct(){
parent::__construct();
//HERE YOU CAN MAKE THE 2nd DB load after you detect that you are in valid subdomain
$expHost = explode('.', $_SERVER['HTTP_HOST']));
if( count($expHost) === 3 && $expHost !== 'www') {
$dbC_config = // Get your DB COMPANY configurations or input it here as array..
$dbC_config['database'] = 'encrypted('.$expHost[0].')';
$this->dbC = $this->load->database($dbC_config);
}
}
}