【发布时间】:2013-02-05 14:52:44
【问题描述】:
我想知道是否可以在 cakephp 的子控制器中继承/覆盖构造函数。
在我的 AppController.php
我是这样的:
public function __construct( $request = null, $response = null ) {
parent::__construct( $request, $response );
$this->email = new CakeEmail();
$this->_constants = array();
$this->_constants['some_var'] = $this->Model->find( 'list', array(
'fields' => array( 'Model.name', 'Model.id' )
) );
}
在我的子控制器SomeController.php中,它继承了父构造函数
public function __construct( $request = null, $response = null ) {
parent::__construct( $request, $response );
}
当我尝试访问 $this->email 和 $this->_constants['some_var'] 时,它们都为空。但是只要我将代码直接放在 SomeController.php 中而不是继承,它就起作用了。
我是不是做错了什么,或者这对蛋糕来说是不可接近的? 我也尝试了函数beforeFilter(),同样的事情发生了。 但是每个控制器都有自己的 beforeFilter() 是有道理的。
【问题讨论】:
-
如果你打算覆盖构造函数,你应该先看看你在那里覆盖了什么。以及确切的构造函数参数是什么样的......提示:应该尊重类型提示
-
你忘记设置了..??试试 $this->set 方法..
-
这看起来像一个可怕的错误混乱。该任务仍然有一个 EmailComponent ,在构造函数中进行查找很尴尬。这看起来是一种完全错误的方法,不管它被认为是用来做什么的。
标签: oop class cakephp inheritance constructor