如何获取Cakephp的完整当前url

如何在Cake的视图中回显当前url?

你也可以做

从一个视图文件:

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

这将给你从主机名称/控制器/行动/参数的绝对url

要么

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

这应该给你的主机名完整的url。

我更喜欢这个,因为如果我没有提到“请求”这个词,我的IDE会发出警告。

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

API文档: class-CakeRequest


编辑:澄清所有选项

 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/ 
 <?php echo $_SERVER[ 'REQUEST_URI' ]; ?> 

编辑:或者,

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

下面的“Cake的方式”是有用的,因为你可以抓取完整的当前URL并修改它的一部分,而不需要手动parsing出$_SERVER[ 'REQUEST_URI' ]string,然后手动将它连接回有效的输出URL。

全电streamurl:
Router::reverse($this->request, true)

轻松修改当前url的特定部分:
1)复制Cake的请求对象: $request_copy = $this->request

2)然后修改$request_copy->params和/或$request_copy->query数组

3)最后: $new_url = Router::reverse($request_copy, true)

我知道这篇文章有点过时了,而且CakePHP版本也很盛行。 在CakePHP的当前(2.1.x)版本中,甚至在1.3.x中,如果我没有弄错,可以像这样获取当前的控制器/视图url:

 $this->params['url']; 

虽然此方法不返回参数,但是在构build新URL时想要将参数附加到链接时,这是非常方便的。 例如,我们有当前的URL:

项目/编辑/ 6

我们想追加一个名为c_action的自定义参数动作,其值为remove_image,可以使用$this->params['url]; 并将其与自定义参数key =>值对的数组合并:

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

使用上面的方法,我们可以将我们的自定义参数附加到链接上,而不会在URL上build立长链参数,因为$ this-> params ['url]只返回控制动作的URL。

在上面的例子中,我们需要手动添加6的ID到URL,所以perahaps最终的链接构build将是这样的:

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

其中$ is是项目的ID,您可以将其分配给控制器级别的variables$ id。 新的URL将是:

项目/编辑/ 6 / c_action:remove_image

对不起,如果这是丝毫不相关的,但我遇到这个问题时,寻找一种方法来实现上述,并认为其他人可能会从中受益。

对于CakePHP 3:

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

获取CakePHP 3.x的当前URL?

在你的布局中:

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

您将获得当前页面的完整URL,包括查询string参数。

例如http://website.example/controller/action?param = value

如果你需要做一些search引擎优化,你可以在元标记规范中使用它。

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

获取当前url在您的视图文件中相当简单

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

这将返回完整的urlhttp://www.example.com/subpath/subpath

如果您只想要相对path,请使用以下内容

 echo $this->here; 

要么

理想情况下,路由器:: url(“”,true)应返回当前视图的绝对URL,但始终返回相对URL。 所以黑客得到绝对的URL是

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

要获得FULL_BASE_URL,请点击此处

在请求对象中你有你需要的一切。 了解它:

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

和你的情况

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

1.3的Cake方法是使用Router :: reverse:

链接到文档

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

产量

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

for cakephp3 +:

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

将得到例如: http : //bgq.dev/home/index?t44=333

Cakephp 3.5:

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

调用$ this-> request-> here()从3.4开始被弃用,并将在4.0.0中被删除。 你应该使用getRequestTarget()来代替。

我使用$this->here的path,以获得整个URL,你必须做Juhana说,并使用$_SERVERvariables。 没有必要为此使用Cake函数。

所有以前提出的方法都不能满足我获取完整URL的要求(例如完全符合要求),例如用于从控制器动作发送的电子邮件中。 我也需要scheme和主机名,因此偶然发现了以下方法:

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

由于提供路由器arrays电stream控制器并保持动作,但是id不是,因此必须在这里再次提供。 第二个参数是真正的请求prepend主机名等获得完整的URL。

使用Router :: url()可以在任何情况下使用,因此也可以在视图文件中使用。

是的,在CakePHP 1.3的控制器工作中很容易

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

Saludos

CakePHP 3.x任何地方:

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

对于CakePHP 3.x您可以使用UrlHelper

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

或者你可以使用PaginatorHelper (如果你想在JavaScript或…中使用它):

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

使用Html助手

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

它会产生从http或https开始的完整url

在视图中:

 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) ?> 

在控制器中

 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) ?> 

要获取不带参数的完整url:

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

将返回http(s)://(www.)your-domain.com