test

CakePHP Note

URLマッピング

UPDATE:2009.01.28

特定のURLから指定したコンントローラとアクションを実行させるためにRoutesを設定する事ができます。app/config/routes.phpファイルで設定します。(RoutesではなくApacheのmod_rewriteを使って.htaccessファイルでURLを書き換える方法が好みの人もいます。)


デフォルトのマッピング

基本的なURLのマッピングです。

http://www.mydomain.com/myController/myAction/param1/param2/param3

これは、myControllerコントローラーのmyActionアクションが呼ばれます。アクション以降のURLはパラメーターとしてアクションに渡されます。

http://www.mydomain.com/users/view/param1/param2/param3
$UsersController->view($param1,$param2,$param3);

アクション以降が省略されている時のマッピング

URLでアクション部分が省略されているとindexアクションが呼ばれます。

http://www.mydomain.com/users/
$UsersController->index();

設定済みのマッピング

app/config/routes.phpファイルにいくつかのRouteが設定されています。

サイトのトップページのようにURLにコントローラー部分もなく、「/(ルート)」だけの場合は、PagesControllerコントローラのdisplayアクションが呼ばれます。

http://www.mydomain.com/
$PagesController->display('home');

これは、次のように設定されているからです。

	Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));

また、次のようにも設定されています。*が指定されているのが分かります。*の部分にあたるURLの値がアクションのパラメーターとして渡されます。

	Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

具体的には以下のようにURLで*にあたる'infomation'がdisplayアクションのパラメータとして渡されます。

http://www.mydomain.com/pages/infomation
$PagesController->display('infomation');

マッピングの指定方法

マッピングの書式は次の通りです。マッピングさせるURLを指定し、そのURLから呼び出すコントローラやアクション、パラメーターを指定、さらに正規表現でURLについての検証を行います。

	Router::connect('URL', array('パラメータ' => 'デフォルト値'), array('パラメータ' => '正規表現'));


PostsControllerのViewをURLから省略する例。コントローラでは$this->params['id']でurlの':id'にあたる数字を参照できます。

	Router::connect('/posts/:id', array('action' => 'view'), array('id' => '[0-9]+'));


同じ例で$this->params['id']ではなくアクションの引数として'id'の値を渡す方法。
'pass'キーワードを使います。

	Router::connect('/posts/:id', array('action' => 'view'), array('pass'=>array('id'),'id' => '[0-9]+'));

postsコントローラのviewアクションの引数として'id'の値が渡されます。

全てのコントローラーのURLからViewをから省略する例。':controller'の部分がコントローラーとして認識されます。

	Router::connect('/:controller/:id', array('action' => 'view'), array('id' => '[0-9]+'));