我最近开始使用Yii 2
并且我遇到了布局文件的一些问题,并收到以下错误:
Call to undefined method Yii::app()
这是我的布局文件:
<?php
use yii\helpers\Html;
/* @var $this yii\web\View */
/* @var $content string */
?>
<?php $this->beginPage() ?>
<!DOCTYPE html>
<html lang="<?=Yii::$app->language?>">
<head>
<title><?=Html::encode($this->title)?></title>
<meta charset="<?=Yii::$app->charset?>"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<?=Html::csrfMetaTags()?>
<link href="<?=Yii::app()->request->baseUrl;?>/css/bootstrap.min.css" rel="stylesheet" media="screen">
<link href="<?=Yii::app()->request->baseUrl;?>/css/custom.css" rel="stylesheet" media="screen">
<script type="text/javascript" src="<?=Yii::app()->request->baseUrl;?>/js/bootstrap.min.js"></script>
<script type="text/javascript" src="<?=Yii::app()->request->baseUrl;?>/js/scripts.js"></script>
<!--[if lte IE 8]>
<script src="<?=Yii::app()->request->baseUrl;?>/js/html5shiv.min.js"></script>
<script src="<?=Yii::app()->request->baseUrl;?>/js/respond.min.js"></script>
<![endif]-->
<?php $this->head() ?>
</head>
<body>
<?php $this->beginBody() ?>
<?=$content?>
<?php $this->endBody() ?>
</body>
</html>
<?php $this->endPage() ?>
当我使用Yii::$app
时,我没有遇到任何问题,但如果我使用Yii::app()
,则会收到该错误。
我在一些地方开始使用Yii::app()
,因为我正在阅读并被告知您应该使用以下内容确保在视图中包含绝对路径名称:
Yii::app()->request->baseUrl
...并包含jQuery使用:
Yii::app()->clientScript->registerCoreScript("jquery");
但是当我对app()
做任何事情时,我都会收到上述错误。
我尝试用app()
替换$app
;页面加载正常,但Yii::$app->request->baseUrl
中有一个空白值。
我在这里做错了什么!?
答案 0 :(得分:13)
在Yii 2中,$app
是Yii的属性,而不是方法,因此您应该使用Yii::$app->blah
。
答案 1 :(得分:2)
试试这个:Yii::$app->request->baseUrl;
Yii::$app
是Yii2 Application类的静态var,'yii \ web \ Application'。它指的是Yii Application类的一个实例。由于Request
类默认配置为应用程序组件,因此您可以访问大量有用的属性:Request Class Reference
Yii2还附带了许多辅助类,可以执行许多相同的操作:BaseUrl Helper
用法是:Url::base();
...确保通过将use yii\helpers\Url;
置于控制器顶部(主命名空间下方)来使用命名空间。
答案 2 :(得分:-1)
Yii::$app->homeUrl
Yii::$app
是Yii2 Application类的静态变量,'yii \ web \ Application'。它指的是Yii Application类的一个实例。由于request
类被配置为应用程序组件,因此默认情况下您可以访问所有有用的属性。