CakePHP3 プレフィックス指定を、後からパスだけ変えたい

検証環境: CakePHP 3.4

パス毎に処理の住み分けを行いたい

CakePHP3を使用していて、パス毎に処理を切り替えたいときはRouter::prefixを設定してあげると楽です。

プレフィックスルーティング ルーティング – 3.x

詳しくはドキュメントに書いてあるのですが、例えば/admin/以下にアクセスされたときは管理画面を表示したい!となったら以下のように”routes.php”に記載します。

Router::prefix('admin', function ($routes) {
     // ここに管理画面のルーティングを設定します
});

 

そうするとリクエスト時に呼び出されるコントローラの場所が変わります。

ファイル構成が以下であれば、

  • src
    • Controller
      • TopController.php(1)
      • Admin
        • TopController.php(2)

/top/indexアクセス時には(1)、/admin/top/indexアクセス時には(2)が呼び出されるようになります。Controllerの他にもTemplateの場所なども変わります。以前似たような処理を自力で書いていたことを思えば有難いです。

パスが変わってしまったとき

しかし、当初予定していたパスから変わってしまった、とか暫定で設定していたとかで後から変えたくなったときが難儀です。なにせパスの名称とパッケージ名が同期しているので、パスを変えるとパッケージ名も変える必要があり邪魔くさいです。

とはいえCakePHPなのでソースを見れば回避策が実装されているもので、今回もそういうことで、例えば”admin”から”kanri”になったときは以下のように指定します。

Router::prefix(‘admin’, [‘path’ => ‘kanri’], function ($routes) {
// ここに管理画面のルーティングを設定します
});

第二引数にオプションが指定でき”path”と指定するだけです。ほんまありがたいです。

963-1003 File Routing/Router.php | CakePHP

注意事項

ちなみに”prefix”自体は以前から実装されていますが、この’path’指定はCakePHP3.4で実装された機能のようですので、ご使用の際はお気をつけください。

以上