在 Yii 2 中获取基本 URL
Posted
技术标签:
【中文标题】在 Yii 2 中获取基本 URL【英文标题】:Getting base URL in Yii 2 【发布时间】:2015-03-07 12:52:06 【问题描述】:我正在尝试在 Yii 2 中获取项目的基本 URL,但它似乎不起作用。根据this page你以前可以这样做:
Yii::app()->getBaseUrl(true);
在 Yii 1 中,但在 Yii 2 中 that method 似乎不再接受参数?
我试过不真实,比如:
Yii::$app->getBaseUrl();
但它只是返回空。
你如何在 Yii 2 中做到这一点?
【问题讨论】:
yiiframework.com/doc-2.0/guide-helper-url.html 试试 Yii::$app->request->baseUrl; 【参考方案1】:要获取应用程序的基本 URL,您应该使用 yii\helpers\Url::base()
方法:
use yii\helpers\Url;
Url::base(); // /myapp
Url::base(true); // http(s)://example.com/myapp - depending on current schema
Url::base('https'); // https://example.com/myapp
Url::base('http'); // http://example.com/myapp
Url::base(''); // //example.com/myapp
Url::home()
不应在这种情况下使用。 Application::$homeUrl
默认使用基本 URL,但它可以很容易地更改(例如更改为 https://example.com/myapp/home
),因此您不应依赖它总是返回基本 URL 的假设。如果有特殊的Url::base()
方法来获取基本 URL,那么就使用它。
【讨论】:
【参考方案2】:我的猜测是您需要查看别名。
使用别名就像:
Yii::getAlias('@web');
您也可以始终依赖以下两者之一:
Yii::$app->homeUrl;
Url::base();
【讨论】:
Url
btw 来自yii\helpers\Url
我尝试了Url::home(true)
和Url::base(true)
,它们几乎都返回相同的东西,除了Url::home(true)
包含一个结尾/
。除此之外还有什么不同吗?
有人知道区别吗?可以举个例子吗?
@Brett Yii 框架完全开放并记录在 github 上,你应该检查github.com/yiisoft/yii2/blob/master/framework/helpers/… 并比较函数,Url:home 依赖于 URI:scheme 来返回 URL 如果定义否则它将返回 Yii:: $app->getHomeUrl();否则 URL:base 在 scheme = true 时是相同的,但是当 scheme 为 false 时,url 由 $url = Yii::$app->getUrlManager()->getBaseUrl();我强烈建议不要害怕自己检查 yii 代码,它的文档非常好
也许您可以编辑您的答案以包含Url::base(true)
,因为这可能是我将使用的那个。【参考方案3】:
要使用 Yii2 获取基本 URL:
Url::home(true)
【讨论】:
这是不正确的,Url::home()
并不总是返回基本 URL。见my answer。【参考方案4】:
像这样使用它:
Yii::$app->getUrlManager()->getBaseUrl()
有关基本、规范、主页 URL 的更多信息: http://www.yiiframework.com/doc-2.0/yii-helpers-url.html
【讨论】:
任何时候你看到get
作为函数基名,它就是一个getter
函数。这意味着你可以这样做:Yii::$app->urlManager->baseUrl
。函数很丑,看起来你不明白 getter 函数的意义。
@WadeShuler Getter 只是语法糖,对性能有一些影响——实际上首选使用方法。在框架核心中,它们几乎每次都被使用。【参考方案5】:
试试这个:
$baseUrl = Yii::$app->urlManager->createAbsoluteUrl(['/']);
【讨论】:
【参考方案6】:也许你正在寻找这个
Yii::$app->homeUrl
你也可以用这个
Url::base().
或者这个
Url::home();
【讨论】:
【参考方案7】:您可以通过以下方式访问您的基本 URL:
Yii::$app->request->baseUrl
【讨论】:
【参考方案8】:我搜索了一个解决方案,我们可以如何在 codeigniter 中做类似的事情,比如路由 例如
base_url()
base_url('profile')
base_url('view/12')
只有在 Yii2 中我们才能做到这一点
<?=Url::toRoute('/profile') ?>
【讨论】:
【参考方案9】:在 yii 1 中,此代码返回主机名
Yii::app()->getBaseUrl(true);
在yii2下面
Yii::$app->getBaseUrl();
不作为 Yii::$app 的方法存在,它会触发错误消息
Calling unknown method: yii\web\Application::getBaseUrl()
您可以使用封装了 $_SERVER 的 Request 类
Yii::$app->request->hostInfo
【讨论】:
【参考方案10】:试试下面的代码。它应该工作。它将返回基本 URL 名称
使用 yii\helpers\Url;
Url::home('http') // http://HostName/ 要么 Url::home('https') // https://HostName/
【讨论】:
以上是关于在 Yii 2 中获取基本 URL的主要内容,如果未能解决你的问题,请参考以下文章