在yii2中上传没有activeform的文件

Rez*_*eri 2 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>
Run Code Online (Sandbox Code Playgroud)

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

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();
        }
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:

Please upload a file!
Run Code Online (Sandbox Code Playgroud)

任何帮助都会受到欢迎!

Yup*_*pik 10

你必须改变两件事:

$model->load(Yii::$app->request->post());
Run Code Online (Sandbox Code Playgroud)

至:

$model->load(Yii::$app->request->post(), '');
Run Code Online (Sandbox Code Playgroud)

$model->file = UploadedFile::getInstance($model, 'file');
Run Code Online (Sandbox Code Playgroud)

至:

$model->file = UploadedFile::getInstanceByName('file');
Run Code Online (Sandbox Code Playgroud)

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