我有一个提交文本输入和文件输入的表单(不是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!
欢迎任何帮助!
答案 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
无需加载数据即可加载数据。