带有API的CodeIgniter站点。相同的代码库但不同的控制器

时间:2016-02-21 23:27:42

标签: php codeigniter model-view-controller

我正在试图找到一种方法来使用具有前端和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/apicontrollers/www视为“根控制器目录”,或者完全找到适合我需求的解决方案:

  • 网址应为http://example.comhttp://api.example.com

  • controllers/api/Foo.php不应该从http://example.com/foohttp://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}}

设置为false

0 个答案:

没有答案