2015-02-24 84 views
3

我正在使用Laravel將當前的一個站點轉換爲MVC模式,並且我一直在關注如何管理一個功能:動態日曆下載。使用laravel,我如何創建動態文件下載?

目前,當用戶瀏覽到calendar.php?var=1,一個calendar.ics文件是準備要下載,並且用戶將自動提示:

header('Content-type: text/calendar; charset=utf-8'); 
header('Content-Disposition: inline; filename='.$calData->filename($calData->filename).'.ics'); 


$calData = new CalendarBuilder($_GET['foo']); 

$ical = "BEGIN:VCALENDAR 
VERSION:2.0 
PRODID:-//hacksw/handcal//NONSGML v1.0//EN\r\n"; 

     $ical .= "BEGIN:VEVENT 
UID:" . md5(uniqid(mt_rand(), true)) . "@foo.com 
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z 
DTSTART:".$calData->eventStart($calData->foobar)." 
DTEND:".$calData->eventEnd($calData->foobaz)." 
SUMMARY:".$calData->summary($calData->fooboo)." 
LOCATION:".$calData->location($calData->foofaa)." 
DESCRIPTION:".$calData->description($calData->fi)." 
END:VEVENT\r\n"; 

$ical .= "END:VCALENDAR"; 

echo $ical; 
exit; 

不過,現在我希望用戶能夠瀏覽到calendar/{slug}並立即發送下載響應。但是,使用Laravel,我看不到任何方式這樣做。例如,我可以成立一個路線:

Route::get('calendar/{slug}', array(
    'as' => 'calendar.get', 
    'uses' => '[email protected]' 
)); 

這可以去我的控制器:

class CalendarController extends BaseController { 

    // GET Specific Calendar 
    public class get() { 
     // some logic 
     return Response::download(); 
    } 
} 

但是用Response::download()方法,似乎沒有要任何方式產生動態文件,因爲該方法的參數是:

Response::download($pathToFile, $name, $headers); 

這似乎需要一個靜態的,預先存在的文件。在使用Laravel的MVC架構時,實現目前功能的最佳方式是什麼?

回答

3

我只是在做類似的事情。

這裏是如何爲我工作:

return Response::make($ical)->header("Content-type","text/calendar; charset=utf-8")->header("Content-disposition","attachment; filename=\"".$calData->filename($calData->filename)."\""); 

附: :我知道這有點晚了,但是對於其他任何人來說,這裏應該有一個答案。