17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

プレフィックスルーティング

Posted at

CakePHPでは基本のURLは /:controller/:action となりますが、
/XXX/:controller/:action/YYY/:controller/:action の様な構造にしたい場合、
CakePHPがプレフィックスルーティングを用意してくれているようです。

パッと思いついた方法

routes.php
Router::connect('/XXX/', array('controller' => 'pages', 'action' => 'index'));
Router::connect('/XXX/:controller', array('action' => 'index'));
Router::connect('/XXX/:controller/:action/*', array());

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

これでなんとなく実現できている気になっていました。
ですが、デフォルトのルーティングを活かしたままにすると

/XXX/users/detailUsers コントローラの detail アクションにルーティングされますが、
/users/detail でも同じアクションが実行されてしまいます。

これを抑止するにはCakePHPのデフォルトルーティングを止めなければいけません。

プレフィックスルーティング

config内の core.php に以下を追記します。
(コメントアウトされているので修正でも大丈夫です。)

core.php
Configure::write('Routing.prefixes', array('XXX', 'YYY'));

routes.php を触る必要なく、上記設定を行うと以下の様にルーティングされます。

URL コントローラ アクション
/XXX/users/detail Users XXX_detail
/users/detail Users detail
/YYY/items/list Items YYY_list
/items/list Items list

アクションを実装するメソッドのネーミングルールが変更されますが、
先ほどの様に意図しないルーティングが発生することはありません。

知らなかったのでメモ!

17
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?