私のzf2コントローラでは、アプリケーションのベースURL(たとえばhttp://domain.com
)を取得したいと考えています。ZF2コントローラでbaseUrlを取得するには?
私は次の呼び出しを試みましたが、空の文字列を返します。
$this->request->getBasePath();
コントローラのURLのhttp://domain.com
はどうすれば入手できますか?
私のzf2コントローラでは、アプリケーションのベースURL(たとえばhttp://domain.com
)を取得したいと考えています。ZF2コントローラでbaseUrlを取得するには?
私は次の呼び出しを試みましたが、空の文字列を返します。
$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
}
をそれとも、すべてを短縮気にしない場合は、2行でそれを行うことができます:
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インスタンスが複製されていることに注意してください。
私はこの解決策に満足していませんが、少なくともそれは1つです。
//編集:パスを固定するのを忘れてしまった!
美しい解決策 – albert