Cakephp覆盖Controller构造函数

时间:2014-01-14 11:55:17

标签: oop override cakephp-2.3

我会覆盖这样的constroller constrcuter:

class XControler extends AppController { 

   public $attr = null;  

   public __construct(){

      $this->attr = new YController();

   }

}

但是当我这样做时,我会犯错误!你能解释我为什么以及如何使用requestAction只是OOP来做到这一点!

感谢

1 个答案:

答案 0 :(得分:0)

控制器负责处理最终用户请求。每个控制器操作都应该有一个视图,通常你不想从XController里面的YController访问这些方法。

您希望通过以下方式实现目标:

<强> XController.php

App::uses('YController', 'Controller');

class XController extends AppController {

    public $attr;
    public $uses = array('Person');

    public function __construct($request = null, $response = null) {
        $this->attr = new YController();
        parent::__construct($request, $response);
    }

    public function method1() {
        // you can now call methods from YController:
        $this->attr->Ymethod1();
    }

}

<强> YController.php

class YController extends AppController {

    public function Ymethod1() {
        // ....
    } 

}

但是,业务逻辑应该在模型或组件中。这是在更多控制器之间共享方法的正确方法。

所以你的XController应该是这样的:

class XController extends AppController {

    public $uses = array('Model1');

    public function action1() {
        $this->Model1->method1();
        // ....
    }
}