1

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

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

实现这样一个(简单)事情的最佳方法是什么(我是 CakePHP 的新手)?
尤其是:

  1. 我应该将演示代码(通常是 .ctp)放在哪个文件中以允许它包含在其他视图中?

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

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

4

2 回答 2

3

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

/app/View/Elements/widget.ctp

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

debug($data);

如果您这样做(与将其放在 AppController::beforeFilter() 中相反),则只有在显示小部件时才会获取数据

于 2013-02-12T16:51:49.580 回答
0

简要地

  1. app/Views/Elements/fancy_element.ctp 然后将其包含在 app/Views/Layouts/default.ctp
  2. 应用程序/控制器/AppController.php

    class AppController extends Controller {

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

    }

  3. 根据您的业务逻辑需要。通常是 YourFancyController/your_cool_action。只需在 ajax 请求的情况下处理重定向或刷新。


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

于 2013-02-12T11:16:30.213 回答