依我之见,如果我们想实例化一个模型(例如命名Post
),我们只需要调用:
$post = new Post();
现在,我也想实例化一个Controller
(例如命名Post
这个控制器命名,PHP文件PostController.php
)。 所以我用这个代码:
$postController = new PostController();
不过,我这段代码运行时出现错误。
我做了一些搜索,发现它应该像下面的实例:
$postController = Yii::app()->createController('post/index');
它可以正常运行。 但我仍然不知道为什么第一个方法行不通?
回答您的具体问题:“为什么第一个方法是行不通的”。 文件夹/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()
只需使用:
$controller = Yii::app()->controller;
这将返回当前的控制器的请求。
此外在这里看到的文档: http://www.yiiframework.com/doc/api/1.1/CApplication#controller-detail