2012-09-13 9 views
14

私のzf2コントローラでは、アプリケーションのベースURL(たとえばhttp://domain.com)を取得したいと考えています。ZF2コントローラでbaseUrlを取得するには?

私は次の呼び出しを試みましたが、空の文字列を返します。

$this->request->getBasePath(); 

コントローラのURLのhttp://domain.comはどうすれば入手できますか?

答えて

39

私は、これはちょっと、それは動作しますが、それを行うためのきれいな方法ではありませんが、知っている:

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 
} 

をそれとも、すべてを短縮気にしない場合は、2行でそれを行うことができます:

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

美しい解決策 – albert

6

固有の方法があるかどうかはわかりませんが、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インスタンスが複製されていることに注意してください。

私はこの解決策に満足していませんが、少なくともそれは1つです。

//編集:パスを固定するのを忘れてしまった!

関連する問題