url と controller, action のマッピングメモ

※CakePHP1.2 の話です。


CakePHP で既存の controller, action を任意の url で実行するには
/app/config/routes.phpマッピングを記述すればよい。


例えば、マニュアルには /blog/history/05/june という url で
BlogController の history アクションに 05, june というパラメータを
渡す方法を書いてある。

次の例では、/blog のすべてのURLを、 BlogController に接続します。デフォルトのアクションは、 BlogController::index() になります。

例 4.3. Route の例

connect ('/blog/:action/*', array('controller'=>'Blog', 'action'=>'index'));


でも実はこれ、特に設定しなくても普通に実行される。
何も設定しなくても、ディレクトリの第一階層は controller として扱われるし、
第二階層は action として扱われる。
そして、それ以下はパラメータになる。


マニュアルで言わんとしてるのは、これが任意の url で可能であるってことだ。
例えば、 /archive/05/june/ という url で上記と同じ action を実行するには、
以下のように記述するとよい。

    Router::connect('/archive/*', array('controller' => 'blog', 'action' => 'history'));


また、 /blog ではなく、 /cms 以下全ての url を BlogController に接続するには、以下のようにする。

    Router::connect('/cms/:action/*', array('controller' => 'blog', 'action' => 'index'));

ここまでがマニュアルに書いてあることだ。



試してみた限りでは、さらに /archives/something/category/ という url で、
BlogController の category アクションに、 "something" というパラメータを渡すことが可能だ。

こうする。

    Router::connect('/archives/:pass/:action/*', array('controller' => 'blog')); 

ただし、/archives/something/category/hoge/ としても、 hoge はパラメータとして渡されない。
ぽい。
メモ。