如何将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会创建一个我可以在Google地球中打开的有效KML文档,尽管扩展名为.XML。当我将文件放在/app/View/Post/kml
下,并访问/posts/download.kml时,会抛出错误:查看文件" / home / public / app / View / Themed / Cakestrap / Posts / download.ctp"缺少。
我尝试将我的视图复制到上面的位置,但这只是将XML转换为我的标准布局。为XML和JSON以外的文件类型创建数据视图的正确方法是什么?
答案 0 :(得分:2)
可悲的是,KML没有在服务器vide Google中识别出的mime类型。因此,当您将其添加到Router::ParseExtensions(...)
时,Cake无法看到该扩展程序,也不会尝试访问kml文件夹中的download.ctp
。
您可以使用两种方法来设置此功能:
尝试像这样手动调用渲染:
<?php
$this->response->type("application/vnd.google-earth.kml+xml");
$this->render('kml/download.ctp', 'xml');