2017-10-11 66 views
1

我有一個提交文本輸入和文件輸入的窗體(非活動窗體)。我可以保存文本字段但未檢測到文件。在yii2中上傳沒有活動窗體的文件

查看:

<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

檢查模型加載發佈數據? –

+0

沒有發佈的數據沒有加載到$ model – goseo

回答

4

你必須改變兩兩件事:

$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以無形式加載數據。

+0

OMG,它工作!謝謝你,Yupik。我不會想出這樣的解決方案。那麼,什麼是'$ model-> load(Yii :: $ app-> request-> post(),'');'真的嗎? – goseo

+0

回答更新:) – Yupik