CakePHPでHtmlHelperを使って開いているページのURLを取得する | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

純粋なPHPで書く場合の$_SERVER['REQUEST_URI']と同じように、CakePHPで自分自身のページのURLを取得したいということがあります。

まぁ、REQUEST_URIでいいじゃん、って言う意見もあると思いますが、CakePHPを使っているならそっちのお作法に倣いたいとか、REQUEST_URIを使う場合、ドメインまでは返って来ないので、


$url = http://' . htmlspecialchars($_SERVER["HTTP_HOST"] . $_SERVER['REQUEST_URI']);

みたいなことをするのが面倒だという場合に便利かもしれません。



CakePHPで自分自身のURLを取得する


結論から書けばテンプレートの中でHtmlHelperを使って


<?php echo $this->Html->url('', true); ?>

のような書き方をすれば自分自身のURLが取得可能です。

元々、HtmlHelper::url()は、引数からURLを生成してくれるモジュールなんですが、第1引数を空で渡せば今開いているページのURLを返してくれます。

第2引数はドメイン名を付けて返すかどうかのオプションです。


// $this->Html->url('', true)の場合
http://www.example.com/search/category/123

// $this->Html->url()の場合
/search/category/123

のような違いです。


第1引数に配列でURLの構成情報を渡すことでそのURLを生成してくれます。


echo $this->Html->url(array(
    "controller" => "foo",
    "action" => "bar",
    "fuga" => "hoge"
));

まぁ、リンクのURLを作りたいという場合は、HtmlHelper::link()を使った方が早いと思いますが。

詳細は、マニュアル も参照してみてください。


少し本件からは話がずれますが、Controller内でURLを取得したいまたはURLを生成したいという場合は、下記のように書くことで取得ができます。


$url = Router::url(array('controller' => 'foo', 'action' => 'bar', 'hoge', 'fuga'), true);

使い方はHtmlHelperと同じです。

ロジックに応じて使い分けができるので便利ですね。