yii2プロジェクトでは、データベースにパスが保存されているファイルをダウンロードするためにコンポーネントを使用しています。カスタムコンポーネントを使用したYii2ファイルのダウンロード
は、私はセットアップ上記のコードでのコントローラのアクションへのリンクを持っている私のアクション列
['class' => 'yii\grid\ActionColumn',
'template'=>'{update}{pdf}{delete}',
'buttons'=>[
// to display pdf icon.
'pdf' => function ($url, $model) {
$id = [];
foreach ($model->sdsrefs as $mod)
$id[] = $mod->file_id;
return Html::a('<span class="glyphicon glyphicon-download-alt"></span>', Url::to(['product/download', 'id' => implode($id)]), [
]);
}
],
'options'=>[
'style'=>'width:70px;'
]
],
にセットアップダウンロードボタンを持っています。
ダウンロードするために、私はコンポーネントを呼び出していますコントローラのアクションで私のコントローラのアクション
public function actionDownload($id)
{
Yii::$app->files->downloadFile($id);
$searchModel = new ProductSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
。ここで何が起きるのかは、PDFボタンをクリックするとページ内のコンテンツをエコーアウトするときにダウンロードするのではなく、私はそれがファイルのdowloadを実行したいPdfボタンを押したとき。
コンポーネントのダウンロード機能。
public static function downloadFile($id) {
$file = File::findOne($id);
$filepath = Files::getFilePath($id);
if (file_exists($filepath)) {
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$file->file_name);
header('Content-Length: ' . filesize($filepath));
readfile("$filepath");
}else{
echo "file not exist: ".$filepath;
}
exit;
}
pdfアクションボタンをクリックすると、どのように私の結果を得ることができますか?
は
ファイル・パスは、すでに私たちのプロジェクトで実装されています。したがって、コンポーネントを使用してファイルパスのセットアップとダウンロードオプションを使用する必要があります –