File 如何在yii2视图中显示上传的文件并与之交互?
我在控制器中添加了文件上传功能,文件存储在指定的目录中,但更新、索引、视图等视图仅显示文件名。我需要一个链接或按钮与这个上传的文件进行交互。例如,按此链接打开文件,或同时下载此文件的按钮。你能帮我吗 型号:File 如何在yii2视图中显示上传的文件并与之交互?,file,view,upload,yii2,display,File,View,Upload,Yii2,Display,我在控制器中添加了文件上传功能,文件存储在指定的目录中,但更新、索引、视图等视图仅显示文件名。我需要一个链接或按钮与这个上传的文件进行交互。例如,按此链接打开文件,或同时下载此文件的按钮。你能帮我吗 型号: public function rules() { return [ ... [['attachment'],'file'], ]; } 控制器: public function actionCreate() { $model = new L
public function rules()
{
return [
...
[['attachment'],'file'],
];
}
控制器:
public function actionCreate()
{
$model = new Letter();
if ($model->load(Yii::$app->request->post())) {
$model->attachment = UploadedFile::getInstance($model, 'attachment');
$filename = pathinfo($model->attachment , PATHINFO_FILENAME);
$ext = pathinfo($model->attachment , PATHINFO_EXTENSION);
$newFname = $filename.'.'.$ext;
$path=Yii::getAlias('@webroot').'/uploads/';
if(!empty($newFname)){
$model->attachment->saveAs($path.$newFname);
$model->attachment = $newFname;
if($model->save()){
return $this->redirect(['view', 'id' => $model->id]);
}
}
}
return $this->render('create', [
'model' => $model,
]);
表单视图:
<?php $form = ActiveForm::begin(['options' => ['enctype'=>'multipart/form-data']]); ?>
...
<?= $form->field($model, 'attachment')->fileInput() ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
...
提前感谢。更新您的表单视图,如下所示:
<?php $form = ActiveForm::begin(['options' => ['enctype'=>'multipart/form-data']]); ?>
...
<?= $form->field($model, 'attachment')->fileInput() ?>
/*link to download file*/
<?if(!$model->isNewRecord):?>
<?= Html::a('Download file', ['download', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
<?endif;?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
在网格视图中:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'id'=>'mygrid',
'columns' => [
['class' => 'yii\grid\SerialColumn'],
[
'attribute'=>'attachment',
'format'=>'raw',
'value' => function($data)
{
return
Html::a('Download file', ['letter/download', 'id' => $data->id], ['class' => 'btn btn-primary']);
}
],
],
]); ?>
您好,谢谢您的回答。它表示未定义的变量$model。我应该将其添加为参数还是创建全局变量$model=new Letter()?@VitalyPark更新的控制器代码请立即检查表单视图中的if语句是否出错。“isNewRecord:?>”部分在视图中看起来像一个简单的文本。@VitalyPark请指定该错误代码或消息。
<?= GridView::widget([
'dataProvider' => $dataProvider,
'id'=>'mygrid',
'columns' => [
['class' => 'yii\grid\SerialColumn'],
[
'attribute'=>'attachment',
'format'=>'raw',
'value' => function($data)
{
return
Html::a('Download file', ['letter/download', 'id' => $data->id], ['class' => 'btn btn-primary']);
}
],
],
]); ?>