cakephp url




如何獲取Cakephp的完整當前URL (15)

Cakephp 3.5:

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

從3.4開始,不推薦調用$ this-> request-> here(),並將在4.0.0中刪除。 您應該使用getRequestTarget()代替。

你如何在Cake的視圖中回顯當前的URL?


Cakephp 3.x任何地方:

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

在視圖中:

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

以下“Cake方式”非常有用,因為您可以獲取完整的當前URL並修改其中的部分內容,而無需手動解析$_SERVER[ 'REQUEST_URI' ]字符串,然後手動將其連接回有效的url以進行輸出。

完整的網址:
Router::reverse($this->request, true)

輕鬆修改當前網址的特定部分:
1)製作Cake的請求對象的副本: $request_copy = $this->request

2)然後修改$request_copy->params和/或$request_copy->query數組

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


你也可以

從視圖文件:

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

這將為您提供主機名的絕對URL,即/ controller / action / params

要么

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

這應該給你帶有主機名的完整網址。


使用Html幫助器

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

它將生成從http或https開始的完整URL


在視圖文件中獲取當前URL非常簡單

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

這將返回完整的URL http://www.example.com/subpath/subpath

如果您只想要相對路徑,請使用以下命令

echo $this->here;

要么

理想情況下,Router :: url(“”,true)應返回當前視圖的絕對URL,但它始終返回相對URL。 所以獲取絕對URL的黑客是

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

要獲得FULL_BASE_URL,請here


在請求對像中,您擁有所需的一切。 要理解它:

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

在你的情況下

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

對於CakePHP 3:

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

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


我找到的最簡單的方法是它包括主機/路徑/查詢和
適用於ControllersCakephp 3.4 ):

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

返回這樣的東西(我們用它作為登錄回調網址):

http://192.168.0.57/archive?melkId=12

我更喜歡這個,因為如果我沒有提到“請求”這個詞,我的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/

是的,在CakePHP 1.3中的Controler Work中是簡單的完整URL

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

Saludos


獲取CakePHP 3.x的當前URL?

在你的佈局中:

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

您將獲得當前頁面的完整URL,包括查詢字符串參數。

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

如果你需要做一些SEO,你可以在元標記規範中使用它。

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

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

編輯:或,

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




cakephp