【CakePHP4入門】ビューでドキュメントルートからのパスを取得する方法
例えばドキュメントルートが「/var/www/html」の場合、「/var/www/html/sample/」以下にCakePHPをインストールしたとすると、
URLは「https://【ドメイン名】/sample/~」でアクセスすることになります
この時ビューテンプレートのHTML内でリンクの記述をする際には、aタグのhrefは「/sample/test/view」のような記述になります。
そのまま記述しても問題ありませんが、もし開発環境は「/sample」以下に実装しているが、本番はドキュメントルート直下の場合、
開発環境:https://【開発環境ドメイン】/sample/〜」
本番環境:https://【本番環境ドメイン】/〜」
となるため、そのままのパスでは本番にアップする際にリンク切れになってしまいます。
このように環境によってURLを変更しなくてもよいように取得・表示したい時の方法について、調べてみました。
CakePHP4では、以下のような方法で記述するとよさそう。
<?php
echo $this->Url->build('/test/view'); //→/sample/test/view
echo Router::url('/test/view'); //→/sample/test/view
echo Router::url('/test/view',true); //→htts://【ドメイン名】/sample/test/view
?>
1行目と2行目は、ドキュメントルートからのHTML絶対パス、3行目はhttpから始まるURLが取得できます。
2行目と3行目の記述をするときには、テンプレート上部でRouterクラスをuseしておく必要があります。
<?php
use Cake\Routing\Router;
?>
補足:$this->Html->urlが使えない
「$this->Html->url(‘/test/view’);」を使えばOKという記述も見かけたのですが、私の環境ではurlメソッドが無いというエラーになってしまいました。CakePHP4では今回の記述でないとダメなのかもしれません。