2016-09-21 4 views
0

ich habe ein wenig über yii2 Rahmen gelernt, aber ich habe einen Fehler weicht ich lösen kann nicht ..yii2 Datei-Upload-Fehler

Ich versuche, ein Bild hinzufügen Formular anzumelden.

Ansicht:

  <?php $form = ActiveForm::begin(['id' => 'form-signup', 'options' => ['enctype' => 'multipart/form-data']]); ?> 

      <?= $form->field($model, 'voornaam')->textInput(['autofocus' => true]) ?> 
      <?= $form->field($model, 'bedrijf') ?> 
      <?= $form->field($model, 'telefoon') ?> 
      <?= $form->field($model, 'username')?> 
      <?= $form->field($model, 'email') ?> 
      <?= $form->field($model, 'password')->passwordInput() ?> 
      <?= $form->field($model, 'file')->fileInput() ?> 

      <div class="form-group"> 
       <?= Html::submitButton('Signup', ['class' => 'btn btn-primary', 'name' => 'signup-button']) ?> 
      </div> 

     <?php ActiveForm::end(); ?> 

Controller

public function actionSignup() 
{ 
    $model = new SignupForm(); 
    if ($model->load(Yii::$app->request->post())) { 
     if ($user = $model->signup()) { 
      if (Yii::$app->getUser()->login($user)) { 
       return $this->goHome(); 
      } 
     } 
    } 

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

Modell:

public function signup() 
{ 
    if (!$this->validate()) { 
     return null; 
    } 

    $user = new User(); 

      $imageName = $user->username; 
      $user->file = UploadedFile::getInstance($user,'file'); 
      $user->file->saveAs('uploads/'.$imageName.'.'.$model->file->extension); 
      $user->picture = 'uploads/'.$imageName.'.'.$model->file->extension; 

    $user->voornaam = $this->voornaam; 
    $user->bedrijf = $this->bedrijf; 
    $user->telefoon = $this->telefoon; 
    $user->username = $this->username; 
    $user->email = $this->email; 
    $user->setPassword($this->password); 
    $user->generateAuthKey(); 

    return $user->save() ? $user : null; 
} 

ich erhalte die Fehlermeldung: Anruf auf eine Elementfunktion saveAs() auf null

Was habe ich falsch gemacht? (Ich verwende die erweiterte Vorlage).

Danke.

Antwort

0

Sie $this statt $user verwenden sollten, oder Sie sollten

$user=$this 

hinzufügen, weil einfach $ user ist eine neue Instanz und ihr Feld ist leer!

+0

Danke, das hat funktioniert! Aber es gibt einen nächsten Fehler: Aufruf unbekannte Methode: yii \ web \ UploadedFile :: save() ich von yii die Erweiterung des Herstellers bin mit selbst Verwendung yii \ web \ UploadedFile; Meine Sicherungszeile: $ this-> file-> save(); –

+0

Ich denke, Sie sollten saveAs() verwenden; –

+0

Ich schaffte es zu arbeiten, Was ich tat, war die letzte Zeile von $ this zu $ ​​Benutzer, am Ende speichern Sie das Register für den Benutzer. $ user-> picture = 'uploads /'.$ imageName.'. '. $ This-> Datei-> Erweiterung; –

0

Es sieht aus wie Sie falsche Dateipfad sind zu erwähnen, müssen Sie rootpath erwähnen für die Funktion zum Beispiel speichern

$user->file->saveAs(\Yii::getAlias('@webroot').'/uploads/'.$imageName.'.'.$model->file->extension); 
+0

i die Zeile mit Ihnen ersetzt, und machte einen Upload-Ordner in der Wurzel, aber immer noch nur knapp sein Ziel Arbeit und gleicher Fehler .. –

0

Ich habe separate Upload-Funktion verwendet, um eine Datei hochzuladen, und es hat funktioniert.

meiner Ansicht

<?php $form = ActiveForm::begin(['id' => 'form-signup','options' => ['enctype' => 'multipart/form-data']]); ?> 

      <?= $form->field($model, 'username') ?> 

      <?= $form->field($model, 'email') ?> 

      <?= $form->field($model, 'password')->passwordInput() ?> 

      <?= $form->field($model, "files")->fileInput() ?> 

      <div class="form-group"> 
       <?= Html::submitButton('Signup', ['class' => 'btn btn-primary', 'name' => 'signup-button']) ?> 
      </div> 

     <?php ActiveForm::end(); ?> 

Controller

public function actionSignup() { 
     $model = new SignupForm(); 
     if ($model->load(Yii::$app->request->post())) { 
      $model->files = \yii\web\UploadedFile::getInstance($model,'files'); 

      if ($model->upload() && $user = $model->signup()) { 
       if (Yii::$app->getUser()->login($user)) { 
        return $this->goHome(); 
       } 
      } 
     } 

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

und mein Modell ist

//declare variable 
public $files; 

//add this to your rules 
[['files'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg, jpeg'] 


//File upload function 
public function upload() 
    { 
     if ($this->validate()) { 
      $this->files->saveAs('../web/uploads/' . $this->files->baseName. '.' .$this->files->extension); 
      $this->picture = '../web/uploads/' . $this->files->baseName. '.' .$this->files->extension; 
      return true; 
     } else { 
      return false; 
     } 
    } 


    public function signup() 
    { 
      $user = new User(); 
      $user->username = $this->username; 
      $user->email = $this->email; 
      $user->picture = $this->picture; 
      $user->setPassword($this->password); 
      $user->generateAuthKey(); 
      if ($user->save()) { 
       return $user; 
      } 
      else{ 
       return null; 
      } 

    }