2012-09-13 45 views
14

在我的zf2控制器中,我想檢索應用程序的基本URL(例如http://domain.com)。如何在ZF2控制器中獲得baseUrl?

我嘗試了以下調用,但它返回一個空字符串。

$this->request->getBasePath(); 

我怎樣才能在我的控制器中獲得URL的http://domain.com部分?

回答

39

我知道這是不是這樣做的最漂亮的方式,但是,嘿,它的工作原理:

public function indexAction() 
{ 
    $uri = $this->getRequest()->getUri(); 
    $scheme = $uri->getScheme(); 
    $host = $uri->getHost(); 
    $base = sprintf('%s://%s', $scheme, $host); 

    // $base would be http://domain.com 
} 

或者,如果你不介意縮短一切你能做到這一點在兩行:

public function indexAction() 
{ 
    $uri = $this->getRequest()->getUri(); 
    $base = sprintf('%s://%s', $uri->getScheme(), $uri->getHost()); 
} 
+0

美麗的解決方案 – albert

6

我不確定是否有本地方式,但可以使用Request中的Uri實例。 你可以把這個片段作爲一種變通方法,直到你找到一個更好的解決方案:

$basePath = $this->getRequest()->getBasePath(); 
$uri = new \Zend\Uri\Uri($this->getRequest()->getUri()); 
$uri->setPath($basePath); 
$uri->setQuery(array()); 
$uri->setFragment(''); 
$baseUrl = $uri->getScheme() . '://' . $uri->getHost() . '/' . $uri->getPath(); 

這個作品在控制器上下文。請注意,在第2行中,來自請求的Uri實例被克隆,以便不直接修改請求的uri實例(以避免副作用)。

我對這個解決方案並不滿意,但至少它是一個。

//編輯:忘記添加路徑,修復!