我已经完成了一些代码,其中我尝试将数据表(http://datatables.net/)与cakePHP集成。
它与我自己的应用程序一起启动并运行,但我想让它更通用,这样它就可以被任何 cakePhp 应用程序中的任何人使用,最重要的是我希望它适合 cakePHP 约定。
所以目前这就是我所拥有的...
一个名为 dataTables
的 cakePHP 助手,它采用以下参数:$modelName
、$fields
、$headers
。
-
$modelName
是其数据将填充表的模型的名称。 -
$fields
是我们想要在表中显示的字段数组(所有字段都必须以"ModelName"开头,这意味着我们可以在表中显示关联的模型值) -
$headers
是我们希望显示在表格顶部的标题列表。
帮助程序生成一个空的 html 表($headers
作为标头)。然后,该表由datables的javascript填充(如果您不熟悉dataTables服务器端处理,则可能需要阅读此内容)。
Javascript 从我们想要获取其模型的控制器的dataTable()
操作中检索表数据。javascript 还将发送模型名称(我们发送给帮助程序)和字段。然后,控制器打印出 JSON 数据(通过空白视图)
我的两个主要问题是:
-
将 dataTable 操作放在控制器中似乎不对。A) 因为它实际上不需要控制器,因为它知道需要加载的模型和字段,B) 因为它不是真正的用户操作,它实际上只是一个 JSON 响应。那么应该放在哪里呢?
-
要打印我的
dataTable()
操作的 JSON 回复,我使用"blank.ctp
"视图和使用echo jsonencode($output)
。使用视图输出 JSON 数据似乎不对。通常视图只针对用户,对吗?
回答这两个问题的一种方法是拥有一个独立的dataTable.php
文件,该文件将根据模型名称和收到的字段打印相关的 JSON 数据。但考虑到 MVC 模式,这种^^似乎不合逻辑。
代码目前有点混乱(上面的答案应该可以帮助我整理它!)但如果需要查看,请告诉我。
希望这对我自己以外的人有意义。
一会儿,插件似乎是最好的主意。您可以使用组件自动加载帮助程序,并为您提供控制器可见钩子,以便为提供输出的帮助程序/元素设置数据。
使用行为公开 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
我写了一个处理这个 https://github.com/cnizzdotcom/cakephp-datatable 的CakePHP Componenent