How to get complete current url for Cakephp

PhpCakephp

Php Problem Overview


How do you echo out current URL in Cake's view?

Php Solutions


Solution 1 - Php

You can do either

From a view file:

<?php echo $this->request->here() ?>">

Which will give you the absolute url from the hostname i.e. /controller/action/params

Or

<?php echo Router::url(null, true) ?> 

which should give you the full url with the hostname.

Solution 2 - Php

I prefer this, because if I don't mention "request" word, my IDE gives warning.

<?php echo $this->request->here; ?>

API Document: class-CakeRequest


Edit: To clarify all options

Current URL: http://example.com/en/controller/action/?query=12

// Router::url(null, true)
http://example.com/en/controller/action/

// Router::url(null, false)
/en/controller/action/

// $this->request->here
/en/controller/action/

// $this->request->here()
/en/controller/action/?query=12

// $this->request->here(false)
/en/controller/action/?query=12

// $this->request->url
en/controller/action

// $_SERVER["REQUEST_URI"]
/en/controller/action/?query=12

// strtok($_SERVER["REQUEST_URI"],'?');
/en/controller/action/

Solution 3 - Php

<?php echo $_SERVER[ 'REQUEST_URI' ]; ?>

EDIT: or,

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

Solution 4 - Php

The following "Cake way" is useful because you can grab the full current URL and modify parts of it without manually having to parse out the $_SERVER[ 'REQUEST_URI' ] string and then manually concatenating it back into a valid url for output.

Full current url:
Router::reverse($this->request, true)

Easily modifying specific parts of current url:

  1. make a copy of Cake's request object: $request_copy = $this->request

  2. Then modify $request_copy->params and/or $request_copy->query arrays

  3. Finally: $new_url = Router::reverse($request_copy, true).

Solution 5 - Php

Cakephp 3.5:

echo $this->Url->build($this->getRequest()->getRequestTarget());

Calling $this->request->here() is deprecated since 3.4, and will be removed in 4.0.0. You should use getRequestTarget() instead. $this->request is also deprecated, $this->getRequest() should be used.

Solution 6 - Php

I know this post is a little dated, and CakePHP versions have flourished since. In the current (2.1.x) version of CakePHP and even in 1.3.x if I am not mistaken, one can get the current controller/view url like this:

$this->params['url'];

While this method does NOT return the parameters, it is handy if you want to append parameters to a link when building new URL's. For example, we have the current URL:

projects/edit/6

And we want to append a custom parameter action called c_action with a value of remove_image, one could make use of $this->params['url]; and merge it with an array of custom parameter key => value pairs:

echo $this->Html->link('remove image', array_merge($this->params['url'], array('c_action' => 'remove_image'));

Using the above method we are able to append our custom parameters to the link and not cause a long chain on parameters to build up on the URL, because $this->params['url] only ever returns the controll action URL.

In the above example we'd need to manually add the ID of 6 back into the URL, so perahaps the final link build would be like this:

echo $this->Html->link('remove image', array_merge($this->params['url'], array($id,'c_action' => 'remove_image'));

Where $is is a the ID of the project and you would have assigned it to the variable $id at controller level. The new URL will then be:

projects/edit/6/c_action:remove_image

Sorry if this is in the slightest unrelated, but I ran across this question when searching for a method to achieve the above and thought others may benefit from it.

Solution 7 - Php

for CakePHP 3:

$this->Url->build(null, true) // full URL with hostname

$this->Url->build(null) // /controller/action/params

Solution 8 - Php

Getting current URL for CakePHP 3.x ?

In your layout :

<?php 
    $here = $this->request->here();
    $canonical = $this->Url->build($here, true);
?>

You will get the full URL of the current page including query string parameters.

e.g. http://website.example/controller/action?param=value

You can use it in a meta tag canonical if you need to do some SEO.

<link rel="canonical" href="<?= $canonical; ?>">

Solution 9 - Php

Getting the current URL is fairly straight forward in your view file

echo Router::url($this->here, true);

This will return the full url http://www.example.com/subpath/subpath

If you just want the relative path, use the following

echo $this->here;

OR

Ideally Router::url(“”, true) should return an absolute URL of the current view, but it always returns the relative URL. So the hack to get the absolute URL is

$absolute_url  = FULL_BASE_URL + Router::url(“”, false);

To get FULL_BASE_URL check here

Solution 10 - Php

In the request object you have everything you need. To understand it:

debug($this->request->url);

and in your case

$here = $this->request->url;

Solution 11 - Php

To get the full URL without parameters:

echo $this->Html->url('/', true);

will return http(s)://(www.)your-domain.com

Solution 12 - Php

The simplest way I found is it that includes host/path/query and
works in Controllers (Cakephp 3.4):

Cake\View\Helper\UrlHelper::build($this->request->getRequestTarget());

which returns something like this (we use it as login callback url) :

http://192.168.0.57/archive?melkId=12

Solution 13 - Php

After a few research, I got this as perfect Full URL for CakePHP 3.*

$this->request->getUri();

the Full URL will be something like this

> http://example.com/books/edit/12

More info you can read here: https://pritomkumar.blogspot.com/2017/04/how-to-get-complete-current-url-for.html

Solution 14 - Php

The Cake way for 1.3 is to use Router::reverse:

Link to documentation

$url = Router::reverse($this->params)
echo $url;

yields

/Full/Path/From/Root/MyController/MyAction/passed1/named_param:bob/?param1=true&param2=27

Solution 15 - Php

Cakephp 3.x anywhere:

Router::reverse(Router::getRequest(),true)

Solution 16 - Php

for CakePHP 3.x You can use UrlHelper:

$this->Url->build(null, true) // output http://somedomain.com/app-name/controller/action/params

$this->Url->build() // output /controller/action/params

Or you can use PaginatorHelper (in case you want to use it in javascript or ...):

$this->Paginator->generateUrl() // returns a full pagination URL without hostname

$this->Paginator->generateUrl([],null,true) // returns a full pagination URL with hostname

Solution 17 - Php

for cakephp3+:

$url = $this->request->scheme().'://'.$this->request->domain().$this->request->here(false);

will get eg: http://bgq.dev/home/index?t44=333

Solution 18 - Php

In View:

Blank URL: <?php echo $this->Html->Url('/') ?>
Blank Full Url: <?php echo $this->Html->Url('/', true) ?>
Current URL: <?php echo $this->Html->Url($this->here) ?>
Current Full URL: <?php echo $this->Html->Url($this->here, true) ?>

In Controller

Blank URL: <?php echo Router::url('/') ?>
Blank Full Url: <?php echo Router::url('/', true) ?>
Current URL: <?php echo Router::url($this->request->here()) ?>
Current Full URL: <?php echo Router::url($this->request->here(), true) ?>


Solution 19 - Php

I use $this->here for the path, to get the whole URL you'll have to do as Juhana said and use the $_SERVER variables. There's no need to use a Cake function for this.

Solution 20 - Php

All previously proposed approaches didn't satisfy my requirements for getting a complete URL (complete as in qualified) e.g. to be used in an email send from controller action. I need the scheme and hostname as well then, and thus stumbled over the following approach:

<?php echo Router::url( array( $id ), true ) ?>

Due to providing router array current controller and action is kept, however id isn't and thus has to be provided here again. Second argument true is actually requesting to prepend hostname etc. for getting full URL.

Using Router::url() is available in every situation and thus can be used in view files as well.

Solution 21 - Php

Yes, is easy FULL URL in Controler Work in CakePHP 1.3 >

<?php echo Router::url( array('controller'=>$this->params['controller'],'action'=>$this->params['action']), true );

Saludos

Solution 22 - Php

Use Html helper

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

It'll produce the full url which'll started from http or https

Solution 23 - Php

In CakePHP 3 $this->here will be deprecated. The actual way is using this method:

Router::url($this->request->getRequestTarget())

Solution 24 - Php

For CakePHP 4.*

echo $this->Html->link(
    'Dashboard',
    ['controller' => 'Dashboards', 'action' => 'index', '_full' => true]
);

Solution 25 - Php

If you want to return the base path, you can check that the Router class is using Configure::read ('App.fullBaseUrl'). So if you are a fan of hexagonal architecture, you can create a Cake implementation for creating URLs that will only use Configure from all CakePHP framework.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPassionate EngineerView Question on Stackoverflow
Solution 1 - PhpAbba BryantView Answer on Stackoverflow
Solution 2 - PhptranteView Answer on Stackoverflow
Solution 3 - PhpJJJView Answer on Stackoverflow
Solution 4 - PhpCostaView Answer on Stackoverflow
Solution 5 - PhpAndreyPView Answer on Stackoverflow
Solution 6 - PhpSimonDowdlesView Answer on Stackoverflow
Solution 7 - PhpAlex StallenView Answer on Stackoverflow
Solution 8 - PhpGuillaumeView Answer on Stackoverflow
Solution 9 - PhpSubodh GhulaxeView Answer on Stackoverflow
Solution 10 - PhpgdmView Answer on Stackoverflow
Solution 11 - PhpThomas RbtView Answer on Stackoverflow
Solution 12 - PhpMSSView Answer on Stackoverflow
Solution 13 - PhpMarwan SalimView Answer on Stackoverflow
Solution 14 - PhpSteve TauberView Answer on Stackoverflow
Solution 15 - PhpAmorphousView Answer on Stackoverflow
Solution 16 - PhpBr.sasaView Answer on Stackoverflow
Solution 17 - PhpCao VisonView Answer on Stackoverflow
Solution 18 - PhpMarkus EthurView Answer on Stackoverflow
Solution 19 - PhpDunhamzzzView Answer on Stackoverflow
Solution 20 - PhpsoletanView Answer on Stackoverflow
Solution 21 - PhpUserView Answer on Stackoverflow
Solution 22 - PhpSamphorsView Answer on Stackoverflow
Solution 23 - PhpOliwer LisekView Answer on Stackoverflow
Solution 24 - PhphasentopfView Answer on Stackoverflow
Solution 25 - PhpdmajkaView Answer on Stackoverflow