ルーティング
クライアントがリクエストするURLに対してアプリケーション内のコンントローラとアクションを実行させるかを特定するためにRouterクラスを用いて設定します。通常app/config/routes.phpファイルで設定します。
デフォルトのルーティング
基本的なルーティングです。
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]+'));