Cakephp PHP プログラミング

【Cakephp2→4】複数単語URLの「-」自動変換を「_」のまま維持する方法

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をルーティングしておくことで、ヘルパーを利用した書き方をしても、デフォルトのハイフン出力ではなく、アンダーバーに自動変換してくれるようになります。

-Cakephp, PHP, プログラミング
-