Yii框架中如何设置基本URL

9

当我执行

print_r(Yii::app()->request->baseUrl)

我得到了一个空字符串。Yii论坛上的一篇帖子说默认情况下为空。我该如何更改其默认值以便我可以使用绝对URL?

哪个 Yii 版本?项目所在目录是哪里?这是一个 Web 应用程序吗?你使用过 yiic 吗? - bool.dev
@DroidUser Yii版本1.1.7。我的目录树如下: /htdocs/protected/(web应用程序文件) /lib/yii/(yii核心文件)这是一个Web应用程序。我没有使用yiic。有没有一种方法可以通过运行来设置baseUrl?我没有进行Yii框架的初始安装。 - David Xia
在我的答案中,我已经提到了如何运行yiic,您不必安装yii,只需将其放置在一个可访问Web的文件夹中,如自带的readme所述。 - bool.dev
这是我的收藏:http://suriyanphp.blogspot.in/2012/06/yii-resources.html - Suriyan Suresh
对于任何想要获取基本URL的人,可以使用这里的代码:Yii::app()->createAbsoluteUrl(Yii::app()->request->url)。该代码从这里获取。 - h2ooooooo
7个回答

33
你可以编辑 /path/to/application/protected/config/main.php 以更改默认值。添加一个请求组件,并配置 baseUrl 属性。
return array(
    ...
    'components' => array(
        ...
        'request' => array(
            'baseUrl' => 'http://www.example.com',
        ),
    ),
);

2
很高兴我找到了这个......我试图在顶层数组中设置基本URL。谢谢。 - Paul Sandel

12

正如该论坛中的帖子所说,这可能因不同平台或Web应用程序未位于默认文件夹中而有所不同。
以下所有内容都适用于我:

echo Yii::app()->request->baseUrl."<br/>" ;
print_r(Yii::app()->request->baseUrl);
echo "<br/>";
var_dump(Yii::app()->getBaseUrl(true));
echo "<br/>";
echo Yii::app()->request->getBaseUrl(true);
我使用yiic在终端中使用以下命令创建了默认设置的Web应用程序:yiic webapp /path/to/webapp。这将生成Web应用程序所需的目录结构,以及默认的模板文件。您可以试一试并查看其运行方式。我自己对yii也是新手。 编辑: 这个解决方案可能适用于原始提问者,但正确的设置baseUrl的方法由ecco在这个问题的答案中展示。

var_dump(Yii::app()->request->baseUrl); var_dump(Yii::app()->getBaseUrl(true)); var_dump(Yii::app()->request->getBaseUrl(true)); 这段代码输出了 string(0) "",string(25) "http://www.MYURL.com",string(25) "http://www.MYURL.com"。很有趣。 - David Xia
你用yiic重新创建了项目吗?还是使用了原始配置?另外,Yii::app()->baseUrl也可以使用。你得到的东西很有趣。 - bool.dev
我没有开始我们的Yii项目,所以我不知道。但是我会问我的团队。你认为我为什么会得到上面的输出? - David Xia
抱歉,我不确定输出情况,但有一件事情我非常确定,如果你使用yiic,应该没问题。 - bool.dev
它基于您的引导文件的位置。 - ldg

3

很可能是空白的,因为您的bootstrap文件(index.php)位于您的Web根目录下。如果不是这样,您应该会看到一些值。更改它将会失去它的作用。

您可以像这样使用:

href="<?php echo 'http://www.myhost.com' . Yii::app()->request->baseUrl; ?>/css/screen.css"

大多数情况下不会更改路径,但如果你决定将Yii应用程序放在子目录中,那么它就是可移植的。(只需删除上面的http方法和主机名即可使其在用户所在的同一主机上运行。)

1

Yii::app()->baseUrl 返回的是从 URL 到 index.php 的相对路径。 例如: 127.0.0.1/index.php 返回 '' 127.0.0.1/yii/index.php 返回 '/yii'


0

尝试 echo Yii::$app->baseUrl(true)
注意,true参数是执行必要操作的。


0

使用 Yii 2.0.13.1 下列代码可以正常工作

<?php echo Yii::$app->request->baseUrl; ?>

0

如果你正在使用 Url helper 生成 URL,你需要将 baseUrl 键设置为 UrlManager 组件

 'urlManager' => [       
        'baseUrl' => 'http://example.com', 

然后,您可以使用 Url 助手创建绝对 URL,如下所示:

echo Url::to(['site/index', 'src' => 'ref1', '#' => 'name'], true); // 输出 ===> http://example.com/index.php?r=site%2Findex&src=ref1#name


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接