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