在我的 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 实例(以避免副作用)。
我对这个解决方案不满意,但至少它是一个。
// 编辑:忘记添加路径,已修复!