什么是使用MVC方法将dataTables与cakePhp集成的最佳方法

时间:2012-04-14 18:59:53

标签: php cakephp datatables

我已经编写了一些代码,我尝试将数据表(http://datatables.net/)与cakePHP集成。

它已经启动并运行我自己的应用程序,但我想让它更通用,所以任何cakePhp应用程序都可以使用它,最重要的是我希望它适合cakePHP约定。

所以目前这就是我所拥有的......

一个名为dataTables的cakePHP助手,它使用以下参数:$modelName$fields$headers

  • $modelName是模型的名称,其数据将填充表格。
  • $fields是我们要在表格中显示的字段数组(所有字段必须以“ModelName”开头。这意味着我们可以在表格中显示相关的模型值)
  • $headers是我们希望在表格顶部显示的标题列表。

帮助程序生成一个空的html表(标题为$headers)。然后该表由datables的javascript填充(如果您不熟悉dataTables服务器端处理,则可能需要阅读this。)

Javascript从我们想要获取其模型的控制器的dataTable()操作中检索表数据。 javascript还会发送模型名称(我们发送给帮助者)和字段。然后控制器打印出JSON数据(通过空白视图)

我的两个主要问题是:

  1. 将dataTable操作放在控制器中似乎不正确。 A)因为它实际上并不需要控制器,因为它知道需要加载哪些模型和字段以及B)因为它不是真正的用户操作,它实际上只是一个JSON响应。那么它应该放在哪里?

  2. 要为我的dataTable()操作打印JSON repsonse,我使用“blank.ctp”视图并使用echo jsonencode($output)。使用视图输出JSON数据似乎不对。通常视图仅供用户使用吗?

  3. 回答这两个问题的一种方法是拥有一个独立的dataTable.php文件,该文件将根据其收到的型号名称和字段打印相关的JSON数据。 但考虑到MVC模式,这^^似乎不合逻辑。

    此刻代码有点乱(上面的答案应该可以帮我整理一下!)但是如果需要的话,请告诉我。

    希望这对我自己以外的人有意义。

2 个答案:

答案 0 :(得分:1)

我想到这一秒,插件似乎是最好的主意。 您可以使用Component自动加载帮助程序,并为您提供一个控制器可见挂钩,以设置提供输出的帮助程序/元素的数据。

使用行为公开json的模型函数,然后使用该组件设置数据。

至于你是否应该使用视图 - 这里是关于json视图的书中的部分。

  

_serialize键是一个特殊的视图变量,用于指示哪个   使用数据视图时,应序列化其他视图变量。   这使您可以跳过为控制器操作定义视图文件的情况   您不需要在数据之前进行任何自定义格式设置   转换为json / xml。

     

如果您需要对视图进行任何格式化或操作   在生成响应之前,您应该使用视图文件。   _serialize的值可以是字符串或视图数组   要序列化的变量:

http://book.cakephp.org/2.0/en/views/json-and-xml-views.html#using-data-views-with-the-serialize-key

答案 1 :(得分:1)

我编写了一个处理此https://github.com/cnizzdotcom/cakephp-datatable

的CakePHP组件