在我的zf2控制器中,我想檢索應用程序的基本URL(例如http://domain.com
)。如何在ZF2控制器中獲得baseUrl?
我嘗試了以下調用,但它返回一個空字符串。
$this->request->getBasePath();
我怎樣才能在我的控制器中獲得URL的http://domain.com
部分?
在我的zf2控制器中,我想檢索應用程序的基本URL(例如http://domain.com
)。如何在ZF2控制器中獲得baseUrl?
我嘗試了以下調用,但它返回一個空字符串。
$this->request->getBasePath();
我怎樣才能在我的控制器中獲得URL的http://domain.com
部分?
我知道這是不是這樣做的最漂亮的方式,但是,嘿,它的工作原理:
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());
}
我不確定是否有本地方式,但可以使用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實例(以避免副作用)。
我對這個解決方案並不滿意,但至少它是一個。
//編輯:忘記添加路徑,修復!
美麗的解決方案 – albert