【问题标题】:CakePHP: Loading external controller methods in one controllerCakePHP:在一个控制器中加载外部控制器方法
【发布时间】:2014-04-27 17:18:53
【问题描述】:

我正在使用 CakePHP 2.4.7

  • 我为“组件”部分设置了 MVC,效果很好。
  • 我为“工具包”部分设置了 MVC,效果很好。

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

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

Kits 和 Components 控制器中的 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();
    }
  }
?>

【问题讨论】:

    标签: cakephp


    【解决方案1】:

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

    如果我正确理解您的意图,您希望在 ProductsController 中同时提供 Kits 数据和 Components 数据。为此,您必须以某种方式链接底层模型(staticallyon the fly)。

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

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

    我希望这会有所帮助!

    【讨论】:

    • 感谢您的回复塞梅尔!我只是想弄清楚如何在底层模型中创建链接。在这个阶段,没有 Products 表,所以我不确定如何创建模型之间的链接..
    • 好的,我得到了它的工作并在我的 ProductsController 中获得了两个数组但是有没有办法清理数组?目前,该数组有 3 个级别:要获取数组中的第一个 KitID,我必须转到:$Kits[0]['Kit']['KitID']。这意味着第二维['Kit']总是重复......我可以完全删除第二维吗?要做到这一点:$Kits[0]['KitID']
    • 这是检索数据的标准格式。我不确定是否存在删除二维的干净方法。但是要使用$Kits[0]['KitID'] 获取数据,您可以手动操作数组(例如使用foreach 循环)。如果您只需要数据的 ID,您还可以使用 'list' 查找类型。有关如何检索数据和格式的完整信息,请阅读documentation
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 2014-09-08
    • 2023-04-10
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    相关资源
    最近更新 更多