私のzf2コントローラーで、アプリケーションのベースURLを取得したいと思います(たとえばhttp://domain.com
)。
次の呼び出しを試しましたが、空の文字列が返されます。
$this->request->getBasePath();
http://domain.com
次に、コントローラーでURLの一部を取得するにはどうすればよいですか?
私のzf2コントローラーで、アプリケーションのベースURLを取得したいと思います(たとえばhttp://domain.com
)。
次の呼び出しを試しましたが、空の文字列が返されます。
$this->request->getBasePath();
http://domain.com
次に、コントローラーでURLの一部を取得するにはどうすればよいですか?
私はこれがそれを行うための最も美しい方法ではないことを知っていますが、ねえ、それはうまくいきます:
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つです。
//編集:パスを追加するのを忘れました、修正されました!