バグ解消法、お役立ち情報など

Router::urlでドメインが表示されない場合の対処法(CakePHP)

image

はじめに

CakePHPでURLを生成する際に、Router::url()を使用することが多いと思います。

ドキュメントには以下のように記載されています。

URL
Router::url([ 'controller' => 'Articles', 'action' => 'index', '?' => ['page' => 1], '#' => 'top' ]); // このような URL が生成されます /articles/index?page=1#top

https://book.cakephp.org/3/ja/development/routing.html#id23

この時に、ドメインまで含めた完全なURLを生成する方法をお伝えします。

結論

config/app.phpfullBaseUrlを編集します。

config/app.php
'App' => [ ... // ↓ デフォルトは false 'fullBaseUrl' => 'http://localhost', ...

上記の例では、固定でローカルホストを指定しています。

環境変数を使用する場合は以下のように書くことができます。

config/app.php
'App' => [ ... // ↓ デフォルトは false 'fullBaseUrl' => env('PROTOCOL', 'http') . '://'. env('DOMAIN', 'localhost'), ...

これで、ドメイン(とプロトコル)が追記されたURLを生成することができます。

先ほどの例では、以下のように生成されます。

プロトコル
Router::url([ 'controller' => 'Articles', 'action' => 'index', '?' => ['page' => 1], '#' => 'top' ]); // このような URL が生成されます http://localhost/articles/index?page=1#top

↓参考にさせていただきました。

https://qiita.com/kgws/items/6e48265fff5af93c519e

バグ解消法、お役立ち情報など