2013年4月15日月曜日

[CakePHP] URL/コントローラのディレクトリ階層

CakePHP を触り始めてまだ間もないが、URLやコントローラのディレクトリ階層がすべて同じ階層で扱っているのことにモヤモヤ感を感じてくる
いまのとろこ実験的にいじっているだけなので、URLがどうだとか、同一ディレクトリにファイルが増えていくとかは、それほど気にすることでもないが、実際のサイト構築を視野にいれると、やはり、URLの階層構造やファイルたちのディレクトリ構造は当然気になるわけである

個人的には以下のような感じで構成できるといいと思っているが・・・

URL:
http://domain/hogehoge/posts/
コントローラの置き場:
・・・/コントローラPath/hogehoge/PostsController.php
要するに、URL階層とコントローラのディレクトリ階層が同じ構成にできると分かりやすいと思うわけ

これを実現しようとすると以下のような設定が必要

まず、コントローラの置き場所はデフォルトでは、 app/Controller に置かなければならない
これを app/Controller/hogehoge に設定する必要がある
bootstrap.php に以下を追加
App::build(array(
'Controller' => array(ROOT.DS.APP_DIR.DS.'Controller'.DS.'hogehoge'.DS),
));
これだけでは、単にコントローラの置き場所を変えただけにすぎず、さらにURLのルーティングを設定する必要がある
routes.php に以下を追加
Router::connect('/hogehoge/posts/', array('controller' => 'posts', 'action' => 'index'));
Router::connect('/hogehoge/posts/:action', array('controller' => 'posts'));

ここまで設定すれば、上記のようにURLとコントローラの階層を合わせることができるわけだ
Viewファイルも同様に階層分けしたければ、bootstrap.phpに同じような設定が必要になる

しかし、階層増やすたびにこんなことやってられないし、そもそもサイトマップ(URL階層)とソースの管理を分かりやすいようにしたかったのに、これでは余計、煩雑になってしまい本末転倒である


そもそも、CakePHP でこのようなことをやること自体がナンセンスで、CakePHPはCakePHPのお作法に従うのが無難だという結論に達したわけである(笑)



0 件のコメント:

コメントを投稿