在 CakePHP 中为 XML 和 JSON 以外的文件类型创建数据视图


Creating data views for file types other than XML and JSON in CakePHP

如何将 CakePHP 2.4 应用程序中的数据导出为 KML,而不仅仅是 XML 和 JSON?

这就是我一直在尝试的:

1:我创建了一个简单的控制器操作 download 来查找模型中的所有数据:

$this->set('posts', $this->Post->find('all'));

2:我在routes.php中添加了文件类型:

Router::parseExtensions('json', 'xml', 'kml', 'csv');

3:我为我的数据视图文件类型创建了一个文件夹:

/app/View/Post/kml

4:我创建了一个视图 download.ctp ,它手动回显出 KML 文件的 XML 标记。

现在问题来了:当我把这个视图文件放在/app/View/Post/xml下时,访问/posts/download.xml会创建一个有效的 KML 文档,我可以在 Google 地球中打开,尽管扩展名.XML。当我将文件放在/app/View/Post/kml下并访问/posts/download.kml时,它抛出了一个错误:查看文件"/home/public/app/View/Themed/Cakestrap/Posts/download.ctp"丢失。

我尝试将视图复制到上述位置,但这只会将 XML 回显到我的标准布局中。为 XML 和 JSON 以外的文件类型创建数据视图的正确方法是什么?

Saddly KML没有在谷歌的服务器中识别的MIME类型。因此,当您将其添加到Router::ParseExtensions(...) Cake 看不到该扩展名时,也不会尝试访问 kml 文件夹中的download.ctp

您有两种选择来设置它以使其工作:

  • 更改服务器设置以识别扩展名Google Doc。
  • 尝试像这样手动调用渲染:

    <?php
    $this->response->type("application/vnd.google-earth.kml+xml");
    $this->render('kml/download.ctp', 'xml');