Создание представлений данных для типов файлов, отличных от 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');
    
Другие вопросы по тегам