開発をしていて、後のメンテナンス性などを考えると、各ソースファイルはできればディレクトリに分けて配置したいなと思うことがあります。
CodeIgniterでは、コントローラ・モデル・ビューともにサブディレクトリに配置することができます。
http://codeigniter.jp/user_guide_ja/general/controllers.html#subfolders
しかし実際には、コントローラだけは、application/controllers直下のディレクトリ内にソースファイルが存在しなければ動作しません。
たとえば、
application/controllers/api/get/hoge.phpを
/api/get/hoge
と呼び出すことはできないわけです。
となると、このようなURLを作りたいと思った場合に、直球で考えると、application/controllers/apiディレクトリにgetコントローラを作ってメソッドを全てぶらさげないといけないのか!?と思ってしまうわけですが、これはルーティングの仕事なのだろうと思います。
上の例でいくと、
application/controllers/api_get/
というディレクトリを作っておいて、
application/config/routes.php
に
$route['api/get/(:any)'] = “api_get/$1″;
とすれば、
/api/get/hoge
で
application/controllers/api_get/hoge.php
を呼び出せるようになるわけですね。
メソッドの数が少なければ(&コード量が少なければ)getコントローラ1つでまかなえるとは思うのですが、最初っからそれなりの数になってしまうことが予想される場合や、後から機能追加が予想される場合には、ソースごと分けたいですよね。
CakePHPなどだとバッキバキにルーティング設定をしたりするようですが、CodeIgniterでのルーティング設定は基本的に「indexメソッドをURLから取る」というシンプルな目的に使われることが多く(自分だけかもしれないですが)それほど使わない印象があるので、メモった次第です。