正如我看到我们想要实例化一个模型(例如命名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)
它运行正常.但我仍然想知道为什么第一种方法不起作用?
回答你的确切问题"为什么第一种方法不起作用".该文件夹/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;
Run Code Online (Sandbox Code Playgroud)
这将返回您当前的请求控制器。
另请参阅此处的文档:http ://www.yiiframework.com/doc/api/1.1/CApplication#controller-detail