2017-01-16 5 views
2

と、ダウンロードされたファイルをサーブ私のコントローラは、それが動作します。このdocによると、基本的なサイレックス

$app->get('/files/{type}', function ($type) use ($app) { 

    $path = __DIR__ . "/../files/$type"; 

    if (!file_exists($path)) { 
     $app->abort(404, "Ce fichier n'existe pas."); 
    } 

    return $app 
     ->sendFile($path) 
    ; 
})->bind('getfile'); 

です。正しいURLを呼び出すと、ファイルは現在のウィンドウで開きます。

しかし、私はブラウザでファイルを開きたくないので、ファイルを保存するだけのダイアログボックスを開きたいと思います。

どうすればいいですか?

答えて

6

"content-disposition"ヘッダーをattachmentに設定する必要があります。

例:

return $app 
    ->sendFile($path) 
    ->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 
basename($path)); 

ファイルの先頭にこれを追加することを忘れないでください:

use Symfony\Component\HttpFoundation\ResponseHeaderBag; 

... PHPはResponseHeaderBagが何であるかを知っており、オートローダがすることができますので、それを見つける。

Linky to docs。

+0

( "Content-Disposition:attachment;");返す前に、それは動作しますが、それはPHPのbrutです... – Macbernie

+0

確かに...それは使用節でより良いです^^感謝@yivi私はシレットが私にエラーを与えない理由を理解していません – Macbernie

+1

あなたはしなかった未定義のクラスを使用すると "FATAL"エラーが発生するため、エラーが発生すると、インタープリタはすぐに終了します。ほぼ確実にあなたのログには誤りがありました。申し訳ありません、私は 'use'ステートメントについて忘れました。私のIDEは私のためにそれを処理し、私は忘れがちです。 :)(未定義のクラスについても適切なIDEが警告しているはずです) – yivi

関連する問題