2

我有一个继承自 CController 的 Controller 的 Register 控制器。

当我使用__construct()它时无法渲染视图。

我尝试parent::_construct($this->getUniqueID())在函数末尾添加,但没有运气。

当我使用时init(),它正在工作。

知道 Yii 如何处理构造与初始化以及为什么找不到渲染视图吗?

编辑:

class Controller extends CController {
}


class RegisterController extends Controller{
    public function init() {
    .
    .
    .
    }
}

这种情况是有效的,当用 __construct 替换 init 时,它无法呈现视图。

4

1 回答 1

2

一般来说,我不建议在 Yii 中覆盖任何对象的结构。

我知道这有点违反直觉,但 Yii 围绕约定工作,这里的约定是将初始化代码放在 init() 方法中。

如果您想查看控制器的源代码,您会发现我在后台做了很多工作,它需要检查主题和控制器文件夹以解析视图的路径。

这主要发生在渲染方法中。但根据经验,坚持使用 init() 方法。

只要遵守约定,你会没事的,我想不出一个不适合在 init 方法中放置额外逻辑的案例。它不像您将参数传递给构造函数,是吗?

于 2013-10-14T19:00:28.197 回答