在 Yii2 中调用自定义组件(Class 未找到)

Calling custom components in Yii2 (Class not found)

我制作了一个自定义组件(getter)。

我的自定义组件运行良好,因为我从控制器进行了测试:

namespace app\controllers;

use Yii;

(...)

class SiteController extends Controller
{
    (...)

    public function actionTest()
    {   
         //OK, print numItems
         echo '<br>-Items: '.Yii::$app->getter->numItems;
    }       
}

现在我想使用标准 php 文件中的组件。此 php 文件位于 cmd 目录中的 Yii 项目结构中。

namespace app\cmd;

use Yii;

echo "Import ok<br>";

echo '<br>-Items: '.Yii::$app->getter->numItems;

echo "Script end";

运行脚本的结果是"Import ok"和Fatal error: Class 'Yii' not found

为什么我会收到 'Class not found' 错误?

你要做的不仅仅是说 use Yii;

查看 web/index.php 例如:

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

$config = require(__DIR__ . '/../config/web.php');
(new yii\web\Application($config))->run();

您会看到需要作曲家的 autoload.php 文件。然后是 Yii.php。如果你在你的文件中做同样的事情,Yii class 已经找到了。

然而,这还不够。为了访问 Yii::$app,你必须创建一个需要配置的 Application 对象。这就是 web/index.php 中最后一行的作用。这考虑了整个配置文件。之后 Yii::$app 就可以访问了。

所以你想要实现的应该用另一种方式来完成。看看 documentation about Yii commands.