我正在寻找有关如何将CodeIgniter用于多个域的明确说明。我想要一组模型和配置文件,能够根据请求来自的域调用不同的控制器。在做了一些研究之后,我相当肯定我目前使用这种设置的方式并不理想,而且我想在我构建太远之前修复它。这是目前的设置:
我有三个我正在管理的域名:
domainA.com
domainB.com
domainC.com
每个域都指向我服务器上的其他文件夹:
/domains
/global
/models
/model1.php
/model2.php
/domainA.com <--- domainA.com points here
/application
/controllers
/domainAController1.php
/domainAController2.php
/assets
/system
/index.php
/domainB.com <--- domainB.com points here
/application
/controllers
/domainBController1.php
/domainBController2.php
/assets
/system
/index.php
/domainC.com <--- domainC.com points here
/application
/controllers
/domainCController1.php
/domainCController2.php
/assets
/system
/index.php
然后,在每个控制器中,我在构造函数中添加一个包路径,以便控制器可以访问我的全局模型:
$this->load->add_package_path(APPPATH.'../../global/');
这允许我像往常一样从控制器加载模型:
$this->load->model('model1');
我上面显示的文件夹层次结构不完整。在每个域文件夹中,都有一个完整的CI安装。因此,如果我想为整个“app”定义常量或配置参数,我基本上必须做三次。此外,我开发的越多,我就越需要更高级的功能,如基本型号和控制器,我感觉我现在使用的这种“包路径”解决方案不会起作用。
这显然不是正确的方法,我希望有人可以为我提供更好的方法来实现它。
我正在运行CodeIgniter 2.1.4版。
*************************** UPDATE **************** ***********
以下是我最终要做的工作。如果这是一个好的或坏的想法,我会喜欢某人的建议,这意味着,你是否预见到使用这种方法有任何明显的问题?
我使用路由和控制器子文件夹来完成我需要的东西。我现在只有一个CI安装,在我的控制器文件夹中,我有domainA.com,domainB.com和domainC.com的子文件夹。
然后,在我的routes.php文件中,我在保留路由后添加了这个:
switch($_SERVER['SERVER_NAME']){
case 'domainA.com':
$controllerSubDirectory = 'domainA.com';
break;
case 'domainB.com':
$controllerSubDirectory = 'domainB.com';
break;
case 'domainC.com':
$controllerSubDirectory = 'domainC.com';
break;
default:
$controllerSubDirectory = '';
break;
}
route['(.*)'] = "{$controllerSubDirectory}/$1";
换句话说,我只是接收传入的请求并将其路由,就好像它实际上是使用相应的子文件夹一样,因为它是第一个URI段。
我有没有想到这个问题?也许某种安全风险?
答案 0 :(得分:0)
简短回答:利用CodeIgniter“第三方Packages”功能。
您的目录结构组织得不是很好。没有必要存储CodeIgniter系统文件的多个副本,当然假设所有应用程序都使用相同的系统(对核心文件的版本和/或相同的修改)。
查看CodeIgniter Docs了解更多详情。
如上所述,您可以利用CI的软件包将打包您的公共代码作为第三方软件包。然后你可以像往常一样加载模型和其他资源,CI将知道如何在它自己上面找到它们。