我正在试图找到一种方法来使用具有前端和api的CodeIgniter驱动的站点。前端部分为http://example.com
,其API为http://api.example.com
。
但是我在分离控制器方面遇到了问题。因为两个站点共享几乎相同的数据,除了控制器,我真的不想维护两个不同的应用程序。现在我已经设置了以下内容:
backend
└─ server
└─ application
└─ controllers
├─ api <- For http://api.example.com
└─ www <- For http://example.com
frontend
├─ .htaccess
└─ index.php <- Where http://example.com points to
api
├─ .htaccess
└─ index.php <- Where http://api.example.com points to
这种工作,但我必须改变很多路由,默认的/class/function/id/
模式似乎打破了。所以我希望CodeIgniter将controllers/api
和controllers/www
视为“根控制器目录”,或者完全找到适合我需求的解决方案:
网址应为http://example.com
和http://api.example.com
controllers/api/Foo.php
不应该从http://example.com/foo
或http://example.com/api/foo
访问,反之亦然。
http://example.com/foo/bar
应致电Foo::bar()
。在路线配置中原本没有(:any)/(:any)
将是一个加号。
由于现在设置的方式,默认控制器需要位于controllers
文件夹中,但所有其他逻辑都在子文件夹中。这感觉不对。
routes.php文件:
if(API) {
$route['default_controller'] = 'apihome';
$route['(:any)/(:any)'] = 'api/$1/$2';
$route['(:any)'] = 'api/$1';
$route['foo/(:num)'] = 'api/foo/$1';
} else {
$route['default_controller'] = 'wwwhome';
$route['(:any)'] = 'api/$1';
}
API
中的/api/index.php
常量设置为true,/frontend/index.php
中的{{1}}