Router::urlでドメインが表示されない場合の対処法(CakePHP)
はじめに
CakePHPでURLを生成する際に、Router::url()
を使用することが多いと思います。
ドキュメントには以下のように記載されています。
URLRouter::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.php
のfullBaseUrl
を編集します。
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
↓参考にさせていただきました。