2012-01-28 2 views
0

У меня есть следующее в файле макета;cakePHP force download of ical

<?php 
$Filename = "TheEvent.vcs"; 
header("Content-Type: application/force-download"); 
header("Content-Disposition: inline; filename=$Filename"); 
echo $content_for_layout; 
?> 

Теперь в контроллере у меня установлен этот макет, и он работает, поскольку я могу видеть текст моего файла. Единственная проблема заключается в том, что загрузка не выполняется на клиенте.

Я последовал за следующее руководство, хотя я использую CakePHP 2.0

http://labs.iamkoa.net/2007/09/07/create-downloadable-ical-events-via-cake/

Благодарность

Ash

ответ

1

вы можете использовать новые функции 2,0 запроса для загрузки сразу:

$this->response->download($filename); 

http://www.dereuromark.de/2011/11/21/serving-views-as-files-in-cake2/

Вы можете использовать файл() и другие документированные способы обслуживания файлов - см http://book.cakephp.org/2.0/en/controllers/request-response.html#cakeresponse

+0

Perfect. Спасибо за ваш ответ. – AshHimself

+0

Не знаете почему, но он показал мне, что «загрузка метода не существует», в то время как '$ this-> response-> download ($ filename);' работал [просто отлично] (http://api.cakephp.org/2.0/ класса CakeResponse.html). Обратите внимание, что 'запрос' заменен на' response'. –

+0

@TheSexiestManinJamaica Вы были правы, я исправил это. – mark

0

Это происходит потому, что "Content-Type: приложения/сила-загрузка" используется и не распознается вашим HTTP-сервером. Таким образом, ваш PHP скрипт неизвестный тип контента и ваш браузер получил сигнал, чтобы загрузить файл и сохранить его :)

0

Принятый ответ заставил меня Method download does not exist.

Вот что работает для меня:

$this->response->download($filename); 

Примечание request заменен response.

Источник: class-CakeResponse.html.