在我ZF2控制器我要检索的应用基础URL(例如http://domain.com
)。
我尝试了以下调用,但它返回一个空字符串。
$this->request->getBasePath();
我怎样才能再拿到http://domain.com
在我的控制器URL的一部分?
在我ZF2控制器我要检索的应用基础URL(例如http://domain.com
)。
我尝试了以下调用,但它返回一个空字符串。
$this->request->getBasePath();
我怎样才能再拿到http://domain.com
在我的控制器URL的一部分?
我知道这是不是这样做的最漂亮的方式,但是,嘿,它的工作原理:
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());
}
我不知道是否有原生的方式,但你可以使用Uri
从实例Request
。 你可以把这个片段作为一种变通方法,直到你找到一个更好的解决方案:
$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的实例(以避免副作用)被克隆。
我不满意这个解决方案,但至少,这是一个。
//编辑:忘了补充路径,固定!