How to Create a URL in Controller like HtmlHelper

mrdaliri picture mrdaliri · Aug 11, 2012 · Viewed 19.2k times · Source

TLDR: How can I create a URL in the Controller similar to how I can use the HtmlHelper to create URLs in a View?


Problem:

I want to print the url of a controller action, in my controller (because I create my JSON string in my controller, not in a view)

In a View, I can use $this->Html->url(), but what about in a Controller?

Should I use defined constant like APP_DIR + Controller name + Controller action?)

Answer

Dave picture Dave · Aug 11, 2012

Use the Router class.

$url = Router::url([
    'controller' => 'Articles',
    'action' => 'index',
    '?' => ['page' => 1],
    '#' => 'top'
]);

or the same thing, but in a more common/simple scenario:

$url = Router::url(['controller' => 'Articles', 'action' => 'index']);

Note: in Cake2.x, "Articles" would be lowercase.


CakePHP 2.x Router documentation

CakePHP 3.x 'Generating URLs' documentation