CakePHP类似于widget的组件的最佳实践

时间:2013-02-12 10:36:02

标签: cakephp

我想构建一个可以作为小方框包含在不同视图中的小部件。

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

/app/View/Elements/widget.ctp

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

debug($data);

如果你这样做(就像把它放在AppController :: beforeFilter()中那样),只有在它显示的小部件时才会获取数据

答案 1 :(得分:0)

简言之

  1. app / Views / Elements / fancy_element.ctp然后将其包含在app / Views / Layouts / default.ctp
  2. app / Controller / AppController.php

    class AppController extends Controller {

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

    }

  3. 正如您的业务逻辑所要求的那样。通常它会是YourFancyController / your_cool_action。如果是ajax请求,请注意重定向或刷新。


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