用户
 找回密码
 入住 CI 中国社区
搜索
查看: 10005|回复: 6
收起左侧

CI 单index.php 控制多个Application

[复制链接]
发表于 2014-8-3 17:23:44 | 显示全部楼层 |阅读模式
很早之前对CI就有所耳闻,只是一直没有详细了解过。最近心血来潮,也是由于最近放假,不知道干些什么。下载个CI程序包玩玩~~

初步感觉是简洁、易上手。解压到网站目录,http://localhost/CodeIgniter_2.2.0/ 即可。"system"与"application"两个文件夹不用解释也知道是做什么的。进入"application"里面的目录名大多似曾相识,可突然有个疑问:如果有多个application应用要怎么办?没多想,直接复制一个"application"文件夹,重命名为"cms"。之后……呃……,"index.php"只能指定一个"application"应用为默认,没有其他的控制参数^^!。还是手册一下吧...

用户手册中一篇“管理你的应用程序”,提供了一种目录结构:
HTML复制代码
applications/foo/
applications/foo/config/
applications/foo/controllers/
applications/foo/errors/
applications/foo/libraries/
applications/foo/models/
applications/foo/views/
applications/bar/
applications/bar/config/
applications/bar/controllers/
applications/bar/errors/
applications/bar/libraries/
applications/bar/models/
applications/bar/views/
复制代码


然后依然是“你需要打开主 index.php 文件,并且设置 $application_folder 变量为目标路径”。我们的问题依旧^^!

看来要在CI中实现单一"index.php"入口管理多个应用还是有些麻烦。整理了一下思路,重新来。依照手册中的目录结构,在"application"分别创建了"admin"和"cms"两个文件夹,并复制其他的子文件夹和文件到其中。单独复制"config"文件夹到"application"目录下,为了是想实现多个应用共用某些配置。最后的目录结构是这个样子的:
HTML复制代码
application/index.html
application/.htaccess
 
application/admin/
application/admin/cache/
application/admin/config/
application/admin/controllers/
application/admin/core/
application/admin/...
 
application/cms/
application/cms/cache/
application/cms/config/
application/cms/controllers/
application/cms/core/
application/cms/...
 
application/config/autoload.php
application/config/config.php
application/config/...
复制代码


为了实现单一入口,接下来的思路是在'core/Common.php'中定义一个setting_application()函数,用此函数替换掉"index.php"中定义"APPPATH"的相关代码
PHP复制代码
    if (is_dir($application_folder))
    {
        define('APPPATH', $application_folder.'/');
    }
    else
    {
        if ( ! is_dir(BASEPATH.$application_folder.'/'))
        {
            exit("Your application folder path does not appear to be set correctly. Please open the following file and correct this: ".SELF);
        }
 
        define('APPPATH', BASEPATH.$application_folder.'/');
    }
复制代码


"APPPATH"常量要在setting_application()函数中根据用户请求动态定义,剩下的问题就是URI及Router的相关修改了。除此之外,setting_application()函数可能还需要根据不同二级域名的请求来判断"APPPATH",比如:admin.test.com 定位到"application/admin/", cms.test.com定位到"application/cms/"。

文章可能有点长,剩下的待续。


评分

参与人数 1威望 +5 收起 理由
Hex + 5 赞一个!

查看全部评分

 楼主| 发表于 2014-8-3 17:31:43 | 显示全部楼层
本想上传两个效果图,无奈没找到上传图片的方法,算了吧!

发表于 2014-11-4 22:32:16 | 显示全部楼层
同一个应用下的后台管理和前台页面,可以直接在视图那里就分开呀。

我现在多个应用,就是把system单独放出去,然后把index.php和appliaction文件放在一起
发表于 2016-2-24 15:29:51 | 显示全部楼层
这个文章怎么没有下文了呢。
发表于 2018-8-14 09:30:27 | 显示全部楼层
不错;支持下;这样就可以 apps 目录下;搞多个站点了

本版积分规则