CakePHP3でURLを生成する

Controller内で使用する場合

Router::urlを使用します。使用する際には Cake\Routing\Router を呼び出しておく必要があります。

use Cake\Routing\Router;

$url = Router::url(['controller' => 'Pages', 'action' => 'ogp', 'id' => $id], true);

ホスト名なども含むフルパスのURLにする場合には2番めの引数を true にします。

https://book.cakephp.org/3.0/ja/development/routing.html#id17

View内で使用する場合

echo $this->Url->build([
      "controller" => "Pages",
      "action" => "ogp",
      "id" => $page->id
  ], true);

https://book.cakephp.org/3.0/ja/views/helpers/url.html#id1

また、拡張子を指定する場合にはあらかじめ

routes.php に

Router::scope('/', function (RouteBuilder $routes) {
    $routes->extensions(['json', 'xml', 'html', 'png']);

のように拡張子を指定しておいた上で、

echo $this->Url->build([
    "controller" => "Posts",
    "action" => "list",
    "_ext" => "json"
]);

のようにして使います。