Как получить baseUrl в контроллере ZF2?
В моем контроллере zf2 я хочу получить базовый URL-адрес приложения (например, http://domain.com
).
Я попробовал следующий вызов, но он возвращает пустую строку.
$this->request->getBasePath();
Как я могу получить http://domain.com
часть URL-адреса в моем контроллере?
Ответы
Ответ 1
Я знаю, что это не самый красивый способ сделать это, но, эй, он работает:
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());
}
Ответ 2
Я не уверен, есть ли родной путь, но вы можете использовать экземпляр 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 из запроса клонируется, чтобы не модифицировать экземпляр ury запроса напрямую (чтобы избежать побочных эффектов).
Я не доволен этим решением, но, по крайней мере, он один.
//Правка: Забыл добавить путь, исправлен!