如何在ZF2控制器中获取baseUrl


How to get baseUrl in ZF2 controller?

在zf2控制器中,我想检索应用程序的基本URL(例如http://example.com)。

我尝试了以下调用,但它返回了一个空字符串。

$this->request->getBasePath();

然后我如何在我的控制器中获得URL的http://example.com部分?

我知道这不是最漂亮的方法,但是,嘿,它很管用:

public function indexAction()
{
    $uri = $this->getRequest()->getUri();
    $scheme = $uri->getScheme();
    $host = $uri->getHost();
    $base = sprintf('%s://%s', $scheme, $host);
    // $base would be http://example.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实例。

我对这个解决方案不满意,但至少,它是一个。

//编辑:忘记添加路径,已修复!