CakePHP3で現在のパスやURLを取得する

過去にCakePHP2でのURL取得方法をメモしましたが、CakePHP3では取得方法が変更されていましたのでメモしておきます。

View クラス(テンプレート上)で取得する場合

今までは HtmlHelper で取得していましたが、CakePHP3 では UrlHelper で取得できます。

// 絶対パスとして取得 (/controller/action/)
<?= $this->Url->build('/controller/action/') ?>

// フル URL として取得 (http://example.com/controller/action/)
<?= $this->Url->build('/controller/action/', true) ?>

通常は絶対パスで取得され、第二引数を true にすると URL として取得されます。

View 以外のクラスで取得する場合

Router クラスを使用しますが、use 句で使用することを宣言しておく必要があります。
UrlHelper::build() も最終的には同じメソッドが呼び出されるので引数の仕様は同じです。

use Cake\Routing\Router;

class HogeController extends AppController {
    public function index() {
        // フル URL として取得
        // (http://example.com/controller/action/)
        $path = Router::url('/controller/action/', true);
    }
}

CakePHPで現在のパスやURLを取得する

CakePHPを使っているときに現在のURLを得る方法が分からなかったのでメモ。
第二引数をtrueにするとURLが、falseにするとスラッシュから始まる絶対パスが返されます。
こんな便利なメソッドがあったとは・・・危うくURL定数を作るところでした。
第一引数をnullにすると現在のパスがそのまま返ってくるのも便利!

$html->url('/controller/action/', true); // ビューのみ
Router::url('/controller/action/', true); // コントローラやモデルなどどこでも可

HTMLヘルパーはViewでしか使えないのに対して、
Routerクラスは静的クラスなのでどこからでもアクセスできます。

2011年12月05日追記:
CakePHP2.2ではHTMLヘルパーの参照方法が変わっていたので追記しておきます。
引数の仕様は同じで第二引数をtrueにするとURLになり、
false(デフォルト値)にすると絶対パスです。

$this->Html->url('/controller/action/', true);
Router::url('/controller/action/', true);

2015年4月2日追記:
CakePHP3でまた使用方法が若干変わっていたので別記事(CakePHP3で現在のパスやURLを取得する)に書きました。