在 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的主要内容,如果未能解决你的问题,请参考以下文章

Yii2 获取URL的一些方法

Yii2中系统定义的常用路径别名,如果获取web的url

Yii2 - 获取控制器的动作但是使用url

获取yii框架Url

Yii获取当前url和域名

Yii获取当前url和域名