【问题标题】:Creating data views for file types other than XML and JSON in CakePHP在 CakePHP 中为 XML 和 JSON 以外的文件类型创建数据视图
【发布时间】:2014-04-03 06:08:12
【问题描述】:

如何将 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 以外的文件类型创建数据视图的正确方法是什么?

【问题讨论】:

    标签: php cakephp cakephp-2.0 kml cakephp-2.4


    【解决方案1】:

    遗憾的是,KML 没有在服务器 vide Google 中识别的 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');
      

    【讨论】:

    • 手动调用渲染的方法工作正常,但是要下载的结果文件获取文本/html内容类型/我最终放置了一个 命令在 kml default.cto 布局末尾停止来自 CakePHP 的任何额外处理。之后,浏览器会知道附件是一个 .kml 文件并使用 GoogleEarth 打开它。
    • 很好,它对你有用。如果您可以将我的解决方案标记为已接受,我将很荣幸(第一个)。关于标题,如果需要,您可以在渲染之前通过执行以下操作来更改它: $this->response->type("application/vnd.google-earth.kml+xml");为了完整起见,我会更新我的答案。
    • 佩德罗,你是 100% 正确的。正确的方法是设置响应头,然后一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多