如何獲取Cakephp的完整當前URL




(19)

要獲取不帶參數的完整URL:

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

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

你如何在Cake的視圖中回顯當前的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



Cakephp 3.5:

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

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


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

鏈接到文檔

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

產量

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

對於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

Cakephp 3.x任何地方:

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

獲取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; ?>">

我更喜歡這個,因為如果我沒有提到“請求”這個詞,我的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 3 $this->here將被棄用。 實際的方法是使用這種方法:

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

我使用$this->here作為路徑,獲取Juhana所說的整個URL,並使用$_SERVER變量。 沒有必要使用Cake函數。


我知道這篇文章有點過時了,CakePHP版本自此繁榮起來。 在CakePHP的當前(2.1.x)版本中,即使在1.3.x中,如果我沒有弄錯,也可以像這樣得到當前的控制器/視圖URL:

$this->params['url'];

雖然此方法不返回參數,但如果要在構建新URL時將參數附加到鏈接,則會很方便。 例如,我們有當前的URL:

項目/編輯/ 6

我們想要附加一個名為c_action的自定義參數動作,其值為remove_image,可以使用$this->params['url]; 並將其與自定義參數key => value對數組合併:

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

使用上面的方法,我們可以將自定義參數附加到鏈接,而不會導致參數的長鏈在URL上建立,因為$ this-> params ['url]只返回控制動作URL。

在上面的例子中,我們需要手動將ID 6重新添加到URL中,因此最終的鏈接構建可能是這樣的:

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

其中$ is是項目的ID,您可以將其分配給控制器級別的變量$ id。 然後新的URL將是:

項目/編輯/ 6 / c_action:remove_image

很抱歉,如果這是無關緊要的,但我在尋找實現上述目標的方法時遇到了這個問題,並認為其他人可能會從中受益。


使用Html幫助器

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

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


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

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

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

http://192.168.0.57/archive?melkId=12

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

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

Saludos


以下“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)


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

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

在你的情況下

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

你也可以

從視圖文件:

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

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

要么

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

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


Syntax    Name             Description

x == y    Equality         True if x and y have the same key/value pairs
x != y    Inequality       True if x is not equal to y
x === y   Identity         True if x and y have the same key/value pairs
                            in the same order and of the same types
x !== y   Non-identity     True if x is not identical to y
++ x      Pre-increment    Increments x by one, then returns x
x ++      Post-increment   Returns x, then increments x by one
-- x      Pre-decrement    Decrements x by one, then returns x
x --      Post-decrement   Returns x, then decrements x by one
x and y   And              True if both x and y are true x=6 y=3
                           (x < 10 and y > 1) returns true 
x && y    And              True if both x and y are true x=6 y=3
                           (x < 10 && y > 1) returns true
a . b     Concatenation    Concatenate two strings: "Hi" . "Ha"




php cakephp