如何在Controller中获取上传的文件,该文件通过yii2中的yii \ helpers \ Html :: fileInput上传

时间:2016-06-09 07:31:54

标签: php yii yii2

在我的表格中,我使用了以下代码:

<?php echo Html::fileInput('imageFile', '', array('id' => 'contentForm_imageFile' )) ?>

我尝试使用以下代码获取控制器中的文件:

$newsModel->imageFile=UploadedFile::getInstance(Yii::$app->request->post('imageFile'), 'imageFile');
    $newsModel->imageFile->saveAs( 'uploads/'.$newsModel->file->basename.'.'.$newsModel->file->extension );

但是在使用上面的代码保存文件时我收到此错误:

  

在null

上调用成员函数saveAs()

因为yii\web\UploadedFile的API文档说明了:

  

getInstance()返回给定模型属性的上传文件,   该文件应使用上传   YII \部件\ ActiveField ::的FileInput()。

那么我怎样才能获得通过yii\helpers\Html::fileInput上传的上传文件?

3 个答案:

答案 0 :(得分:1)

您可以使用getInstanceByName()

获取没有模型的上传文件
$newsModel->imageFile = UploadedFile::getInstanceByName('imageFile');
$newsModel->imageFile->saveAs( 'uploads/'.$newsModel->file->basename.'.'.$newsModel->file->extension );

答案 1 :(得分:0)

以下是适合您情况的官方示例:http://www.yiiframework.com/doc-2.0/guide-input-file-upload.html

请仔细检查您的代码:

  1. 首先,您的表单标记中有enctype="multipart/form-data"吗?
  2. 接下来,请参阅http://www.yiiframework.com/doc-2.0/yii-web-uploadedfile.html#getInstance()-detail了解getInstance的参数。它需要模型实例作为第一个参数,字段名称作为第二个参数。
  3. 检查您的服务器是否收到 您发送的文件。只需var_dump($_FILES);

答案 2 :(得分:0)

要形成添加'enctype' => 'multipart/form-data'

在视图中:

<?= $form->field($model, 'imageFile')->fileInput(['id' => 'contentForm_imageFile']) ?>

或者

<?= Html::activeFileInput($model, 'imageFile', ['id' => 'contentForm_imageFile']) ?>

在控制器

$newsModel->imageFile = UploadedFile::getInstance($newsModel, 'imageFile');
$newsModel->imageFile->saveAs( 'uploads/'.$newsModel->file->basename.'.'.$newsModel->file->extension );