【问题标题】:Getting base URL in Yii 2在 Yii 2 中获取基本 URL
【发布时间】: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 中做到这一点?

【问题讨论】:

标签: php yii yii2


【解决方案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/

              【讨论】:

                猜你喜欢
                • 2014-05-23
                • 1970-01-01
                • 2011-11-22
                • 1970-01-01
                • 2012-04-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多