CakePHP类小部件组件的最佳实践

CakePHP类小部件组件的最佳实践,cakephp,Cakephp,我想构建一个小部件,它可以作为一个小盒子包含在不同的视图中 小部件是一个表格,显示表格中的一些行(模型“Xyz”;某些行(根据用户权限)是可编辑的(用户可以更改其值) 实现这样一个(简单的)东西的最佳方式是什么(我是CakePHP的新手)? 特别是: 我应该将表示代码(通常是.ctp)放在哪个文件中,以便将其包含在其他视图中 我应该将用于检索数据和为表示代码准备变量的代码放在哪个文件中?通常它应该转到一个控制器,但是我可以从另一个控制器包含/调用一个控制器方法 我应该将处理POST请求的代码放在

我想构建一个小部件,它可以作为一个小盒子包含在不同的视图中

小部件是一个表格,显示表格中的一些行(模型“Xyz”;某些行(根据用户权限)是可编辑的(用户可以更改其值)

实现这样一个(简单的)东西的最佳方式是什么(我是CakePHP的新手)?
特别是:

  • 我应该将表示代码(通常是.ctp)放在哪个文件中,以便将其包含在其他视图中

  • 我应该将用于检索数据和为表示代码准备变量的代码放在哪个文件中?通常它应该转到一个控制器,但是我可以从另一个控制器包含/调用一个控制器方法

  • 我应该将处理POST请求的代码放在哪个文件中

  • 简略地

  • app/Views/Elements/fancy_element.ctp,然后将其包含在app/Views/Layouts/default.ctp中
  • app/Controller/AppController.php

    class AppController扩展控制器{

    function beforeFilter() {
        parent::beforeFilter();
        $this->set(
            'cool_variable', 
            $this->YourMethodOrComponent->action($params)
          );
    }
    
    }

  • 根据您的业务逻辑需要。通常情况下,这将是你的幻想控制器/你的酷动作。在ajax请求的情况下,只需注意重定向或刷新



  • 编辑:RichardAtHome提出了更好的解决方案,因为我的假设基于非常过时的原则。

    使用元素存储小部件标记,并使用requestAction获取数据:

    /app/View/Elements/widget.ctp

    $data = $this->requestAction('/controller/action/param1/etc');
    
    debug($data);
    

    如果您这样做(与将其放入AppController::beforeFilter()中类似),则仅当显示的小部件包含数据时才会提取数据

    ,如果您希望在每个页面中包含某些内容,请将其包含在default.ctp中(在
    视图/layout
    文件夹中)您可以使用requestAction方法调用其他控制器函数,也可以简单地将该控制器和actionOk链接起来,但是我在哪里可以处理POST数据呢?(特别是当一些发布的字段出错时,我需要用修改的字段和错误重新显示同一个表)您可以执行一个Ajax请求,该请求始终指向同一个控制器操作。控制器操作可以用json/xml响应,您可以显示结果here@RichardAtHome在cake中,不鼓励使用
    $this->requestAction()
    ,因为它会调用完整的调度程序、路由等。换句话说,它向应用程序发出了另一个单独的请求。@icebreaker该神话很久以前就被彻底揭穿了:-)(有一篇更彻底的揭穿文章,但我现在找不到它><编辑:事实上我认为那是文章,但自从我上次阅读以来,页面颜色方案已经改变了)