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