警予无法实例控制器(Yii cannot Instantiate controller)

2019-09-20 15:16发布

依我之见,如果我们想实例化一个模型(例如命名Post ),我们只需要调用:

$post = new Post();

现在,我也想实例化一个Controller (例如命名Post这个控制器命名,PHP文件PostController.php )。 所以我用这个代码:

$postController = new PostController();

不过,我这段代码运行时出现错误。

我做了一些搜索,发现它应该像下面的实例:

$postController = Yii::app()->createController('post/index');

它可以正常运行。 但我仍然不知道为什么第一个方法行不通?

Answer 1:

回答您的具体问题:“为什么第一个方法是行不通的”。 文件夹/protected/controller 不是为“包含路径”项目。

只需添加'import'=>array('application.controllers.*')到您的配置文件或使用include(Yii::app()->getBasePath().DIRECTORY_SEPARATOR.'controllers'.DIRECTORY_SEPARATOR.'PostController.php');

之前创建PostController中的对象。 嗯,创造新的控制器需要使用该控制器的名称,所以它应该是这样的

$controller = new PostController('post_controller');

我想指出的是,这种类型的控制器创建的是Yii中无用的,因为你正在创建从项目完全分离的控制,所以这将是几乎无用。 正如你提到的,创建控制器正确的方法是通过Yii::app()->createController()



Answer 2:

只需使用:

 $controller = Yii::app()->controller;

这将返回当前的控制器的请求。

此外在这里看到的文档: http://www.yiiframework.com/doc/api/1.1/CApplication#controller-detail



文章来源: Yii cannot Instantiate controller