純粋な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と同じです。
ロジックに応じて使い分けができるので便利ですね。