2015-02-24 3 views
3

Я конвертирую один из моих текущих сайтов в шаблон MVC с Laravel, и я зациклился на том, как управлять одной функцией: динамическими загрузками календаря.Использование 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); 

Это, кажется, требует статического, предварительно существующего файла. Каков наилучший способ реализовать функциональность, которую я имею в настоящее время при использовании архитектуры MVC Laravel?

ответ

3

Я просто работал над чем-то похожим.

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

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

P.S. : Я знаю, что это как-то поздно, но здесь должен быть ответ для кого-то другого.

Смежные вопросы