Cake2の複数単語が続く命名の場合、例えば、 HogeFugasController というのがある場合、URLは「/hoge_fugas/index
」という形でアンダーバーに自動変換されます。
一方、Cake4ではハイフン「-」に変換される仕様なので、URLは「/hoge-fugas/index
」というURLになるので、Cakeアップデートなどの場合は実質的にURLが変更になるので要注意です。
SEOの観点や、社内で広く利用されている場合など、URLが変わってしまっては困るという場合は多いにあります。※301リダイレクトの方法もあるけど。
結論として、Cake2のアンダーバーURL仕様を維持するためには、ルーティングして対応する方法が一つ考えられます。
Cake2: ヘルパーを利用したテンプレートのリンク
<a href="<?= $this->Html->url(['controller' => 'HogeFugas', 'action' => 'edit']) ?>">編集</a>
上記のような例のコードはよく見かけると思います。さきほど述べたように、Cake2では「/hoge_fugas/edit
」という形になります。
Cake4: ヘルパーを利用したテンプレートのリンク
<a href="<?= $this->Url->build(['controller' => 'HogeFugas', 'action' => 'edit']) ?>">編集</a>
同じ出力をCake4でやろうとした場合、上記のようなコードになります。デフォルトではCake4は「/hoge-fugas/edit
」という形です。
Cakeのアップデート作業では、テンプレートの移行作業する際に、そのままではハイフンとして自動変換されるので、うっかりリンク切れになったりします。
アンダーバー形式のUIRLを守るためには /config/routes.php
にルーティング定義することで解決できます。
Cake4: アンダーバーURLを維持するため、ルーティングを活用する
$builder->connect('/hoge_fugas/edit', ['controller' => 'HogeFugas', 'action' => 'edit']);
ヘルパーを利用せず、直接URLを記述する形でも、アンダーバー形式のURLを維持することができます。ですが、ルーティング設定をする方がコードの見通しも良くなると思います。
対象のURLをルーティングしておくことで、ヘルパーを利用した書き方をしても、デフォルトのハイフン出力ではなく、アンダーバーに自動変換してくれるようになります。