Yii无法实例化控制器

Leb*_*arn 5 controller yii

正如我看到我们想要实例化一个模型(例如命名Post),我们只需要调用:

$post = new Post();
Run Code Online (Sandbox Code Playgroud)

现在,我还想实例化一个Controller(例如命名的Post,名为此控制器的php文件PostController.php).所以我使用这段代码:

$postController = new PostController();
Run Code Online (Sandbox Code Playgroud)

但是,运行此代码时出错.

我做了一些搜索,发现应该像下面这样实例化:

$postController = Yii::app()->createController('post/index');
Run Code Online (Sandbox Code Playgroud)

它运行正常.但我仍然想知道为什么第一种方法不起作用?

Joh*_*tan 6

回答你的确切问题"为什么第一种方法不起作用".该文件夹/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()


Dmi*_*kii 1

只需使用:

 $controller = Yii::app()->controller;
Run Code Online (Sandbox Code Playgroud)

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

另请参阅此处的文档:http ://www.yiiframework.com/doc/api/1.1/CApplication#controller-detail