Создание представлений данных для типов файлов, отличных от XML и JSON, в 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
, который вручную выводит теги XML для файла KML.
Теперь возникает проблема: когда я помещаю этот файл представления в /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?
1 ответ
К сожалению, KML не имеет mime-типа, распознаваемого на серверах с Google. Поэтому, когда вы добавляете его в Router::ParseExtensions(...)
Торт не может видеть это расширение и не будет пытаться получить доступ к вашему download.ctp
внутри папки kml.
У вас есть две альтернативы, чтобы настроить это для работы:
- Измените настройки сервера, чтобы он распознавал расширение Google Doc.
Попробуйте вызвать render вручную так:
<?php $this->response->type("application/vnd.google-earth.kml+xml"); $this->render('kml/download.ctp', 'xml');