Hatena::ブログ(Diary)

$php→rails (rails に憧れる phper のブログ)

2007-08-08

[][]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'));

Routes の設定

でも実はこれ、特に設定しなくても普通に実行される。

何も設定しなくても、ディレクトリの第一階層は 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パラメータとして渡されない。

ぽい。

メモ。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/am11op/20070808/1186585270