【问题标题】:Getting Call to undefined method Yii::app() within layout view在布局视图中调用未定义的方法 Yii::app()
【发布时间】:2014-11-20 17:46:21
【问题描述】:

我最近开始使用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-&gt;request-&gt;baseUrl 中有一个空白值。

我在这里做错了什么!?

【问题讨论】:

    标签: php yii yii2


    【解决方案1】:

    在 Yii 2 中,$app 是 Yii 的一个属性,而不是一个方法,所以你应该使用 Yii::$app-&gt;blah

    Source

    【讨论】:

      【解决方案2】:

      试试这个:Yii::$app-&gt;request-&gt;baseUrl;

      Yii::$app 是 Yii2 应用程序类 'yii\web\Application' 的静态变量。它指的是 Yii Application 类的一个实例。由于Request 类默认配置为应用程序组件,因此您可以访问大量有用的属性:Request Class Reference

      Yii2 还附带了一堆帮助类,它们可以做许多相同的事情:BaseUrl Helper

      用法是:Url::base(); ...确保通过将use yii\helpers\Url; 放置在控制器顶部(在主命名空间下方)来使用命名空间。

      【讨论】:

      • 您可能想解释一下为什么会这样。仅代码的答案被认为质量低下,往往会被否决并关闭。
      • 已更新说明。感谢您的建议。
      【解决方案3】:
      Yii::$app->homeUrl
      

      Yii::$app 是 Yii2 应用程序类 'yii\web\Application' 的静态变量。它指的是 Yii Application 类的一个实例。由于request 类被配置为应用程序组件,默认情况下您可以访问所有有用的属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多