在yii2中上传没有activeform的文件

时间:2017-10-11 13:38:26

标签: file-upload yii2

我有一个提交文本输入和文件输入的表单(不是activeform)。我可以保存文本字段但是没有检测到文件。

查看:

<form id="data" method="post" enctype="multipart/form-data">
<div class="form-group">
  <label>bicycle_no</label>
  <input class="form-control" name="bicycle_no" placeholder="" type="text" />
</div>
<div class="form-group">
  <label>image</label>
  <input class="form-control" name="file" type="file">
</div>
<div class="form-group">
  <a href="<?=Yii::$app->homeUrl?>/site/index" class="btn btn-danger">Cancel</a>
  <button class="btn btn-primary">Save</button>
</div>
</form>

我可以在控制器中获取图像:

if(!empty($_FILES['file']['name'])) {
  //var_dump($_FILES['file']; // <<-- shows image data
  $model['image_uploaded'] = $this->upload();
}

public function upload(){

    $model = new UploadImage();
    $model->load(Yii::$app->request->post());

    $path = Yii::getAlias('@frontend') .'/web/upload/couriers/images/';
    //return $path;

    $model->file = UploadedFile::getInstance($model, 'file');
    echo json_encode($model->file); # <<--- shoes nothing
        $model->path = $path;
        if($model->upload()){
            return true;
        }else{
            return $model->getErrors();
        }
}

我得到的错误如下:

Please upload a file!

欢迎任何帮助!

1 个答案:

答案 0 :(得分:9)

你必须改变两件事:

$model->load(Yii::$app->request->post());

为:

$model->load(Yii::$app->request->post(), '');

$model->file = UploadedFile::getInstance($model, 'file');

为:

$model->file = UploadedFile::getInstanceByName('file');

这是因为您没有在表单中使用您的模型。方法load()获得2个参数,第一个是$data - 您已经知道,第二个是$formName。默认设置为null,但如果是null,则会从模型中准备表单名称,例如YourModel[data_key]。在您的情况下,您没有使用ActiveForm和模型来生成表单,因此您的html中没有表单名称。通过将其设置为'',您可以告诉ActiveRecord无需加载数据即可加载数据。