我有一个Register控制器,它继承自继承自CController的Controller。
当我使用__construct()
时,它无法呈现视图。
我尝试在功能结束时添加parent::_construct($this->getUniqueID())
,但没有运气。
当我使用init()
时,它正在运作。
知道Yii如何处理构造与init以及它为什么找不到渲染视图?
class Controller extends CController {
}
class RegisterController extends Controller{
public function init() {
.
.
.
}
}
这种情况正常,当用__construct替换init时,它无法呈现视图。
答案 0 :(得分:2)
一般情况下,我不建议覆盖Yii中任何对象的构造。
我知道它有点反直觉,但Yii适用于约定,这里的约定是在init()方法中放置初始化代码。
如果您想查看Controller's source代码,您会看到我做了很多工作,它需要检查themes and controllers folders以解析视图的路径。
这主要发生在render方法中。但根据经验,坚持使用init()方法。
坚持惯例,你会没事的,我想不出一个不适合在init方法中放置aditional逻辑的情况。它不像你将参数传递给构造函数,是吗?