我想知道是否可以继承/覆盖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->电子邮件和 $ this-> _constants ['some_var'] 时,它们都为空。但是,只要我将代码直接放在SomeController.php而不是继承中,它就会起作用。
我做错了什么,或者这对蛋糕来说根本不平易近人? 我也尝试使用函数 beforeFilter(),同样的事情发生了。 但有意义的是每个控制器都有自己的 beforeFilter()。
答案 0 :(得分:4)
我甚至不会尝试覆盖_construct' function of the appController. That's what the
beforeFilter ,
beforeRender`方法。看起来你只是想从appController传递vars到每个控制器。你可以这样做......
class AppController extends Controller {
var $_constants = array();
public function beforeFilter(){
$this->_constants[] = array('this', 'that', 'the other');
}
}
在您的模型控制器中,您可以像这样访问变量......
class UsersController extends AppController {
public function add(){
pr($this->_constants);
}
}
如果您尝试将变量发送到视图(稍微),这是一个不同的故事。只需使用set方法
class AppController extends Controller {
public function beforeFilter(){
$this->set('_constants', array('this', 'that', 'the other'));
}
}
并且在任何视图中,您都可以使用_constants
调用pr($_constants);
变量。因为它在appController中,所以它应该在每个视图上都可用。