2012-09-13 15 views
14

En mi controlador zf2 quiero recuperar la URL base de la aplicación (por ejemplo http://domain.com).¿Cómo obtener baseUrl en el controlador ZF2?

Intenté la siguiente llamada pero devuelve una cadena vacía.

$this->request->getBasePath(); 

Como puedo continuación, obtener la parte http://domain.com de URL en el controlador?

Respuesta

39

Sé que esto no es la forma más bonita de hacerlo, pero, hey, funciona:

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 
} 

O si no te importa acortar todo lo que podría hacerlo en dos líneas:

public function indexAction() 
{ 
    $uri = $this->getRequest()->getUri(); 
    $base = sprintf('%s://%s', $uri->getScheme(), $uri->getHost()); 
} 
+0

Hermosa solución – albert

6

No estoy seguro de si hay una forma nativa pero puede usar la instancia Uri de Request. Puede tomar este fragmento como una solución hasta que haya encontrado una solución mejor:

$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(); 

Esto funciona en el contexto del controlador. Tenga en cuenta que en la línea 2, la instancia de Uri de la solicitud se clona para no modificar directamente la instancia uri de la solicitud (para evitar los efectos secundarios).

No estoy satisfecho con esta solución, pero al menos, es una.

// Editar: Olvidé agregar la ruta, solucionado!

Cuestiones relacionadas