我不知道如何在Yii2中获取我的应用程序Web文件夹的完整URL。 以下规则:
<?php
$page = $_GET['page'];
// You ***MUST*** sanitize $page here **
$conn = new \PDO(
'mysql:host=127.0.0.1;dbname=database_name;charset=utf8mb4',
$username, $password);
$stmt = $conn->query('select Title from websites limit 12 offset ' . (($page - 1) * 12));
?>
<ul>
<?php while(($row = $stmt->fetch(\PDO::FETCH_OBJ)) !== null): ?>
<li><?= htmlspecialchars($row->Title) ?></li>
<?php endwhile; ?>
</ul>
返回:
<?=Yii::$app->getUrlManager()->getBaseUrl();?><br>
<?=Yii::$app->homeUrl;?><br>
<?=Yii::$app->getHomeUrl();?><br>
<?=Yii::$app->request->url;?><br>
<?=Yii::$app->request->absoluteUrl;?><br>
<?=Yii::$app->request->baseUrl;?><br>
<?=Yii::$app->request->scriptUrl;?><br>
<?=Url::to();?><br>
<?=Url::to(['site/index']);?><br>
<?=Url::base();?><br>
<?=Url::home();?><br>
<?=Yii::$app->getUrlManager()->getBaseUrl();?><br>
当我需要得到(absoluteUrl是最接近的一个)时:
/yiiapp/web
/yiiapp/web/
/yiiapp/web/
/yiiapp/web/en/reset-password-request
http://website.com/yiiapp/web/en/reset-password-request
/yiiapp/web
/yiiapp/web/index.php
/yiiapp/web/en/reset-password-request
/yiiapp/web/site/index
/yiiapp/web
/yiiapp/web/
/yiiapp/web
我可能将其中一个结果与一些$ _SERVER var结合起来......但这是一个解决方案吗?
答案 0 :(得分:1)
您可以使用Yii::$app->getUrlManager()->createAbsoluteUrl()
方法或yii\helpers\Url::toRoute()
生成绝对网址。 yii\helpers\Url::to()
也可以用来查看文档。例如。 <?=Url::to(['site/index'], true);?>
应输出 http://website.com/yiiapp/web/site/index 。如果您需要获取应用的根网址,请尝试\yii\helpers\Url::to('/', true);
答案 1 :(得分:1)
我意识到这篇文章已经很老了,但无论如何我想回答它。 要在Yii2中获取应用程序Web文件夹的完整URL,您可以尝试以下三个选项:
Url::to('@web/', '');
返回//website.com/yiiapp/web/
Url::to('@web/', true);
返回http://website.com/yiiapp/web/
Url::to('@web/', 'https');
返回https://website.com/yiiapp/web/
答案 2 :(得分:0)
有多种方法可以实现这一目标,但获取应用基本网址的最简洁方法可能是使用Url::base()
:
Url::base(true);
Url
helper中的大多数方法允许您指定$scheme
参数 - 如果要创建绝对URL(使用域),则应使用它。
要在返回的基本URL中使用的URI方案:
- false (默认值):返回没有主机信息的基本网址。
- true :返回一个绝对基本网址,其方案与yii \ web \ UrlManager :: $ hostInfo中的方案相同。
- 字符串:返回具有指定方案的绝对基本网址(
http
,https
或空字符串,用于协议相对网址。)