【发布时间】:2014-05-10 06:39:11
【问题描述】:
我正在寻找有关如何将 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 安装。因此,如果我想为整个“应用程序”定义常量或配置参数,我基本上必须做 3 次。此外,我开发的越多,我就越需要更高级的功能,如基本模型和控制器,我觉得我现在使用的这种“包路径”解决方案行不通。
这显然不是正确的方法,我希望有人可以为我提供更好的方法来实现它。
我正在运行 CodeIgniter 版本 2.1.4。
***************************更新**************** ***********
这就是我最终为使其正常工作所做的工作。我希望有人能就这是一个好主意还是坏主意提出建议,也就是说,您是否预见到使用这种方法会出现任何明显的问题?
我使用路由和控制器子文件夹来完成我需要的工作。我现在有一个 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 段。
这有什么我没有想到的问题吗?也许是某种安全风险?
【问题讨论】:
标签: php codeigniter codeigniter-2