2012-09-13 20 views
14

ZF2 denetleyicimde, uygulama temel URL'sini (örneğin, http://domain.com) almak istiyorum.ZF2 denetleyicisinde baseUrl nasıl edinilir?

Aşağıdaki aramayı denedim ancak boş bir dize döndürdü.

$this->request->getBasePath(); 

nasıl sonra benim denetleyicisi URL http://domain.com bölümünü alabilirim?

cevap

39

Bu hey, işler, bunu yapmanın en güzel yolu değil ama biliyorum:

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 
} 

Yoksa her şeyi kısaltılması sakıncası yoksa iki hatlarında yapabileceğini:

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

Güzel çözüm – albert

6

Yerel bir yol olup olmadığından emin değilim, ancak örneğini Request'dan kullanabilirsiniz. Eğer daha iyi bir çözüm bulana kadar Sen geçici bir çözüm olarak bu pasajı alabilir: Bu kontrolör bağlamında çalışır

$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. satırda, isteğin uri örneğini doğrudan değiştirmemesi (yan etkilerden kaçınmak için) isteğinden Uri örneğinin klonlandığına dikkat edin.

Bu çözümden memnun değilim ama en azından bir tanesi.

// Düzenleme: Yolu eklemeyi unuttunuz!

İlgili konular