2016-06-29 3 views
0
関連

マイコードは以下の通りです:Yii2。中にエラーが発生しましたアップロードファイル

モデルルール

[['documentTypeId', 'itemId', 'name', 'document'], 'required'], 
      [['document'], 'file', 'skipOnEmpty' => false, 'extensions' => ['png', 'jpg', 'doc', 'pdf'], 'checkExtensionByMimeType'=>false], 

モデル法

public function upload($file) 
    { 
     if ($this->validate()) { 
      $userFolder = Yii::getAlias("@app")."/uploads/".$this->item->userId; 
      if(BaseFileHelper::createDirectory($userFolder) !== false) { 
       $fileName = uniqid(rand(), false) . '.' . $this->document->extension; 
       $file->saveAs($userFolder.'/' . $fileName); 

       $this->document = $file->name; 

       return true; 
      } else { 
       return false; 
      } 

     } else { 
      return false; 
     } 
    } 

コントローラ

$model = new ItemDocument(); 

     if ($model->load(Yii::$app->request->post()) && $model->validate()) { 

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

      if($model->upload($file) !== false) { 
       $model->save(); 
      } 

      return $this->redirect(['view', 'id' => $model->id]); 
     } 



     return $this->render('create', [ 
      'model' => $model, 
     ]); 

これにより、「文書を空白にすることはできません」という検証エラーが表示されます。 「ドキュメント」フィールドを必須ではないと設定してフォームを送信すると、「ファイルをアップロードしてください」と表示されます。

私はいくつかのフィールドを含むフォームを通じてアップロードしています。

アイデア?

答えて

2

コントローラでmodel-> validate()エラーが見つかりました。私がするとき:

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

ファイルの内容が「ドキュメント」フィールドに読み込まれません。 Yiiは空の隠しフィールドを生成します。だから私はこれを行うには最初のものが必要です。

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

だから今、私のコントローラは次のようになります。

$model = new ItemDocument(); 

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

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

      if($model->validate()) { 

       if ($model->upload() !== false) { 
        $model->save(); 
       } 

       return $this->redirect(['view', 'id' => $model->id]); 
      } 
     } 

     return $this->render('create', [ 
      'model' => $model, 
     ]); 

そして、私はモデルのアップロード方法の内部検証を削除しました。誰かを助けることを願っています。

関連する問題