如何在ZF2控制器中获取baseUrl?

Han*_*ant 16 php zend-framework2

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

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

$this->request->getBasePath();
Run Code Online (Sandbox Code Playgroud)

我怎样才能http://domain.com在控制器中获取URL 的一部分?

And*_*ris 41

我知道这不是最漂亮的方式,但是,嘿,它有效:

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
}
Run Code Online (Sandbox Code Playgroud)

或者,如果你不介意缩短所有内容,你可以用两行来做:

public function indexAction()
{
    $uri = $this->getRequest()->getUri();
    $base = sprintf('%s://%s', $uri->getScheme(), $uri->getHost());
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*l M 6

我不确定是否有本地方式,但您可以使用该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();
Run Code Online (Sandbox Code Playgroud)

这适用于控制器上下文.请注意,在第2行中,克隆了请求中的Uri实例,以便不直接修改请求的uri实例(以避免副作用).

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

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