CodeLab技術ブログ

プログラミング技術まとめ

[CakePHP3]Url::build()でのリンクの書き方がCakePHP2と微妙に違う件

URLを生成したいとき。
以前のバージョンではHtml::url()を使っていたのですが、CakePHP3ではUrl::build()を使うようになりました。

命名規則は大体同じなのですが、CakePHP2風に書いちゃうと動かないことがあったので注意が必要です。
以下にバージョンによるちがいをかきます。

スポンサードリンク
スポンサードリンク

CakePHP2の場合

echo $this->Html->url(array(
“controller” => “posts”,
“action” => “view”,
“bar”
));

// 出力結果
/posts/view/bar

https://book.cakephp.org/2.0/ja/core-libraries/helpers/html.html

コントローラー名は基本小文字で書く
ただしPostsみたいに大文字を含んでいても問題なくアクセスできた。

CakePHP3の場合

echo $this->Url->build([
“controller” => “Posts”,
“action” => “view”,
“bar”,
]);
// 出力結果
/posts/view/bar

一見同じだが、大文字を含んだ形で書く。コントローラー名と一緒です。
小文字だけで書いても、一見通るのだが、HogePostsControllerみたいに2ワード以上のコントローラーの場合、hogeposts と書くとアクセスできないことがある。
環境によっては通っちゃったりするのが困る。とりあえず、CakePHP3のビルトインウェブサーバーでは動いたけど、Apacheでは動きませんでした。

正しいURLは
/hoge-posts/view/bar
となるようです。なんかカッコ悪いが。

こう出るようにUrl::buildで設定するには
“controller” => “HogePosts”
もしくは
“controller” => “hoge-posts”
としないといけないようです。

スポンサードリンク

https://book.cakephp.org/3.0/ja/views/helpers/url.html

今までの癖で全部小文字で書いちゃってすごく戸惑います。
一見動くのがさらにいやらしい。

スポンサードリンク
スポンサードリンク

コメントは受け付けていません。