【问题标题】:Calling custom components in Yii2 (Class not found)在 Yii2 中调用自定义组件(找不到类)
【发布时间】:2015-03-02 17:46:47
【问题描述】:

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

为什么会出现“找不到类”错误?

【问题讨论】:

  • 你缺少 require_once('path/to/yii/framework/yii.php') 吗?
  • 在我的项目根目录中,我有“yii”文件。不是“yii.php”。我尝试使用 require_once 并且不工作。

标签: php yii2 classnotfound


【解决方案1】:

你要做的不仅仅是说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();

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

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

所以你想要达到的目标应该以另一种方式来完成。看看documentation about Yii commands

【讨论】:

  • 就像“(new yii\web\Application($config))->run();”是一个阻塞函数。此调用后的代码不会运行。
  • 不,我认为它不会阻塞。但不要那样尝试!你想达到什么目标?
  • 我需要一个类似“mydomain/file.php”的url,它接收POST请求并调用我的自定义组件来处理。
  • 你可以有一个普通的控制器和动作来获取发布参数(Yii::$app->request->post())并在那里进行处理。在此操作中,您可以返回您想要的任何内容,但您也可以呈现将返回的常规视图。更好的是在被调用的动作中重定向到另一个动作,这样发布的数据就不会被意外调用两次。在第二个操作中为用户提供反馈(“导入成功!”)。但是您需要使用“post”方法使操作可调用,否则您会出现 MethodNotAllowHttpException。
猜你喜欢
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 2015-03-06
  • 1970-01-01
相关资源
最近更新 更多