3.4.5.5 プリフィックスルーティング(Prefix Routing)

たいていのアプリケーションには、権限のあるユーザだけが情報を変更できる管理画面が必要です。そのために/admin/users/edit/5 のような特別な URL を準備することがよくあります。CakePHP では、コア設定ファイル内の Routing.admin に管理パスを設定して admin ルーティングを有効にできます。

Configure::write('Routing.admin', 'admin');
  1. Configure::write('Routing.admin', 'admin');

コントローラ(controller)内では、プリフィックスとして admin_ をメソッドの前につけたすべてのアクション(action)が呼び出されます。usersを例にすると、/admin/users/edit/5というURLへのアクセスで、UsersControlleradmin_editメソッドが、引数5で呼び出されます。

URL /admin を、pagesコントローラのadmin_index アクションにマップするには次のような route を使います。

Router::connect('/admin', array('controller' => 'pages', 'action' => 'index', 'admin' => true)); 
  1. Router::connect('/admin', array('controller' => 'pages', 'action' => 'index', 'admin' => true));

Routerを使って、adminルーティングよりもより複雑な、カスタムプレフィックスを使うことも可能です。

Router::connect('/profiles/:controller/:action', array('prefix' => 'profiles', 'profiles' => true)); 
  1. Router::connect('/profiles/:controller/:action', array('prefix' => 'profiles', 'profiles' => true));

profilesに対するすべての呼び出しは、profiles_プレフィックスのついたメソッドを探して呼び出します。usersを例にとると、/profiles/users/edit/5などの構造を持つURLは、UsersControllerprofiles_editメソッドを呼び出します。また、重要な点として、HTMLヘルパーを使用してリンクを作成するなら、プレフィックスを用いた呼び出しの管理も楽になります。HTMLヘルパーを使ったリンクの例は次のようになります。

echo $html->link('Edit your profile', array('controller' => 'users', 'action' => 'profiles_edit', 'profiles' => true)); 
  1. echo $html->link('Edit your profile', array('controller' => 'users', 'action' => 'profiles_edit', 'profiles' => true));

この方法を使うと、複数のプレフィックスルートを定義することができ、柔軟なURL構造を持つアプリケーションを作成できます。