2012-09-13 10 views
14

Nel mio controller zf2 voglio recuperare l'URL della base dell'applicazione (ad esempio http://domain.com).Come ottenere baseUrl nel controller ZF2?

Ho provato la seguente chiamata ma restituisce una stringa vuota.

$this->request->getBasePath(); 

Come posso quindi ottenere la parte http://domain.com di URL nel mio controller?

risposta

39

So che questo non è il modo più bello di farlo, ma, ehi, funziona:

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 
} 

Oppure, se non ti dispiace accorciare tutto quello che si poteva fare in due linee:

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

Bella soluzione – albert

6

Non sono sicuro se esiste un modo nativo ma è possibile utilizzare l'istanza Uri da Request. Si può prendere questo frammento come una soluzione fino a quando hai trovato una soluzione migliore:

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

Questo funziona nel contesto di controllo. Si noti che nella riga 2, l'istanza Uri della richiesta viene clonata per non modificare direttamente l'istanza uri della richiesta (per evitare effetti collaterali).

Non sono contento di questa soluzione, ma almeno è uno.

// Modifica: Ho dimenticato di aggiungere il percorso, corretto!

Problemi correlati