CakePHP:在一个控制器中加载外部控制器方法

时间:2014-04-27 08:48:30

标签: cakephp

我正在使用CakePHP 2.4.7

  • 我有一个“组件”部分的MVC设置,效果很好。
  • 我有一个“Kits”部分的MVC设置,效果很好。

但是,现在我想为“产品”部分构建一个视图,它只显示一些'组件'和一些'套件< / EM>”。

我认为最好的方法是将两个Index()函数从KitsController和ComponentsController导入ProductsController中的Index()函数,该函数允许我的Products视图访问包含所需数据的两个数组。

套件和组件控制器中的Index()函数只有:

  public function index() {
        $this->set('kits', $this->Kit->find('all'));
    }

我尝试了这个和类似的代码,但它不起作用。我最终得到一个SQL错误,或者找不到Kit,Class或Model错误:

<?php
  //Import controller
  App::import('Controller', 'Kits');
  App::import('Controller', 'Components');

  class ProductsController extends AppController {
    //Instantiation
    $Kits = new KitsController;
    $Comps = new ComponentsController;

    //Load model, components...
    $Kits  -> constructClasses();
    $Comps -> constructClasses();

    function index() {
        $Kits->index();
        $Comps->index();
    }
  }
?>

1 个答案:

答案 0 :(得分:3)

在Controller类中实例化其他Controller类是一个坏习惯。

如果我理解您的意图,您希望在ProductsController中同时提供套件数据和组件数据。为此,您必须以某种方式链接基础模型(staticallyon the fly)。

执行此操作后,ProductModel与其他模型链接,以便您可以通过以下方式获取数据:

function index() {
    $kits = $this->Product->Kit->find('all');
    $comps = $this->Product->Component->find('all');

    $this->set(compact('kits', 'comps'));
}

我希望这有帮助!