在 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.
我制作了一个自定义组件(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.