Как получить baseUrl в контроллере ZF2?


В моем контроллере zf2 я хочу получить URL-адрес базы приложений (например http://domain.com).

Я попробовал следующий вызов, но он возвращает пустую строку.

$this->request->getBasePath();

Как я могу затем получить http://domain.com часть URL-адреса в моем контроллере?

Author: Florent, 2012-09-13

2 answers

Я знаю, что это не самый красивый способ сделать это, но, эй, это работает:

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());
}
 40
Author: Andris, 2012-10-09 18:45:33

Я не уверен, есть ли собственный способ, но вы можете использовать экземпляр 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 запроса напрямую (во избежание побочных эффектов).

Я не доволен этим решением, но, по крайней мере, оно одно.

//Правка: Забыл добавить путь, исправлено!

 6
Author: Daniel M, 2012-09-13 12:42:44