2016-04-15 10 views
0

Ich muss bestimmte Datei hochladen überspringen, wenn Benutzer dieses Formularfeld nicht gefüllt, zum Beispiel habe ich 4 Felder ein Bild hochladen, wenn Benutzer nur 3 Felder ausfüllen, dann Controller sollte 4. Formular Feld überspringen. Fehler Call to a member function saveAs() on null wird erhalten, weil der Controller das leere Formular nicht überspringt.Yii2: Wie leere Formular beim Hochladen von Bild zu überspringen?

Wie leeres Formular zu überspringen?

public function actionCreate() 
    { 
     $model = new HomePageImg(); 

     if ($model->load(Yii::$app->request->post())) 
     { 
      $imageName1 = $model->img_1_name; 
      $imageName2 = $model->img_2_name; 
      $imageName3 = $model->img_3_name; 
      $imageName4 = $model->img_4_name; 

      $model->file1 = UploadedFile::getInstance($model, 'file1'); 
      $model->file1->saveAs(Yii::getAlias('@frontend/web') . '/uploads/hotel-home-img/' . $imageName1 . '.' . $model->file1->extension); 
      //save the path in the db column 
      $model->photo_1 = 'uploads/hotel-home-img/' . $imageName1 . '.' . $model->file1->extension; 

      $model->file2 = UploadedFile::getInstance($model, 'file2'); 
      $model->file2->saveAs(Yii::getAlias('@frontend/web') . '/uploads/hotel-home-img/' . $imageName2 . '.' . $model->file2->extension); 
      //save the path in the db column 
      $model->photo_2 = 'uploads/hotel-home-img/' . $imageName2 . '.' . $model->file1->extension; 

      $model->file3 = UploadedFile::getInstance($model, 'file3'); 
      $model->file3->saveAs(Yii::getAlias('@frontend/web') . '/uploads/hotel-home-img/' . $imageName3 . '.' . $model->file3->extension); 
      //save the path in the db column 
      $model->photo_3 = 'uploads/hotel-home-img/' . $imageName3 . '.' . $model->file1->extension; 

      $model->file4 = UploadedFile::getInstance($model, 'file4'); 
      $model->file4->saveAs(Yii::getAlias('@frontend/web') . '/uploads/hotel-home-img/' . $imageName4 . '.' . $model->file4->extension); 
      //save the path in the db column 
      $model->photo_4 = 'uploads/hotel-home-img/' . $imageName4 . '.' . $model->file1->extension; 

      $model->save(false); 

      return $this->redirect(['view', 'id' => $model->id]); 
     } else { 
      return $this->render('create', [ 
       'model' => $model, 
      ]); 
     } 
    } 
+0

Überprüfen Sie einfach, ob das Objekt null ist, bevor die saveAs – topher

+0

wie geht das? – JKLM

Antwort

2

Sie können es wie dieses

if(UploadedFile::getInstance($model, 'file2')!==null) 
{ 

} 

mich Sie mit dem Code Lassen Sie helfen

public function actionCreate() 
     { 
     $model = new HomePageImg(); 

     if ($model->load(Yii::$app->request->post())) 
     { 
      $imageName1 = $model->img_1_name; 
      $imageName2 = $model->img_2_name; 
      $imageName3 = $model->img_3_name; 
      $imageName4 = $model->img_4_name; 
      if(UploadedFile::getInstance($model, 'file1')!==null) 
      { 
       $model->file1 = UploadedFile::getInstance($model, 'file1'); 
       $model->file1->saveAs(Yii::getAlias('@frontend/web') . '/uploads/hotel-home-img/' . $imageName1 . '.' . $model->file1->extension); 
       //save the path in the db column 
       $model->photo_1 = 'uploads/hotel-home-img/' . $imageName1 . '.' . $model->file1->extension; 
      } 

      if(UploadedFile::getInstance($model, 'file2')!==null) 
      { 
       $model->file2 = UploadedFile::getInstance($model, 'file2'); 
       $model->file2->saveAs(Yii::getAlias('@frontend/web') . '/uploads/hotel-home-img/' . $imageName2 . '.' . $model->file2->extension); 
       //save the path in the db column 
       $model->photo_2 = 'uploads/hotel-home-img/' . $imageName2 . '.' . $model->file1->extension; 
      } 
      if(UploadedFile::getInstance($model, 'file3')!==null) 
      { 
       $model->file3 = UploadedFile::getInstance($model, 'file3'); 
       $model->file3->saveAs(Yii::getAlias('@frontend/web') . '/uploads/hotel-home-img/' . $imageName3 . '.' . $model->file3->extension); 
       //save the path in the db column 
       $model->photo_3 = 'uploads/hotel-home-img/' . $imageName3 . '.' . $model->file1->extension; 
      } 
      if(UploadedFile::getInstance($model, 'file4')!==null) 
      { 
       $model->file4 = UploadedFile::getInstance($model, 'file4'); 
       $model->file4->saveAs(Yii::getAlias('@frontend/web') . '/uploads/hotel-home-img/' . $imageName4 . '.' . $model->file4->extension); 
       //save the path in the db column 
       $model->photo_4 = 'uploads/hotel-home-img/' . $imageName4 . '.' . $model->file1->extension; 
      } 

      $model->save(false); 

      return $this->redirect(['view', 'id' => $model->id]); 
     } else { 
      return $this->render('create', [ 
       'model' => $model, 
      ]); 
     } 
    } 
+0

'if (UploadedFile :: getInstance ($ modell, 'file4')! == null) { $ modell-> file4-> saveAs (Yii: : getAlias ​​('@ frontend/web'). '/ uploads/hotel-home-img /'. $ imageName1. '.'. $ modell-> datei4-> erweiterung); // Speichern Sie den Pfad in der Spalte db $ model-> photo_4 = 'uploads/hotel-home-img /'. $ imageName4. "." . $ model-> file4-> extension; ' } Fehler erhalten' Aufruf an eine Member-Funktion saveAs() on string', im Aktualisieren dieses bestimmten Datensatzes, nicht aktualisieren der anderen 3 Datensätze – JKLM

+0

ich tat die gleiche Weise, wie Ihre Bearbeitung auf die Antwort – JKLM

+0

Ich habe das Problem nicht, aber versuchen Sie, eine Regel zu Ihrem Modell hinzufügen oder können Sie Ihr Modell – Midhun

0

Genau prüfen, ob das Objekt vor dem Aufruf von saveAs null ist:

$model->file3 = UploadedFile::getInstance($model, 'file3'); 
if ($model->file3) { // is_null($model->file3) will also work 
    $model->file3->saveAs(Yii::getAlias('@frontend/web') . '/uploads/hotel-home-img/' . $imageName3 . '.' . $model->file3->extension); 
} 
+0

das vollständig überspringende Formularfeld lädt keine Bilder hoch, wenn es eine Datei zum Hochladen hat. – JKLM

0
$model->file3 = UploadedFile::getInstance($model, 'file3'); 
if ($model->file3 === true) { 
    $model->file3->saveAs(Yii::getAlias('@frontend/web') . '/uploads/hotel-home-img/' . $imageName3 . '.' . $model->file3->extension); 
} 
+0

fügen Sie einige Erklärungen hinzu mit deinem Code, zum besseren Verständnis – SagarPPanchal