2016-09-21 146 views
0

我了解yii2框架一点点,但我得到一个错误至极我并不能解决..yii2文件上传错误

我试图添加图像注册表单。

视图:

  <?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(); ?> 

控制器

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, 
    ]); 
} 

模型:

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; 
} 

我发现了错误:上的空

呼叫一个成员函数的saveAs()

我做错了什么? (我正在使用高级模板)。

谢谢。

回答

0

你应该使用$this,而不是$user或你应该添加

$user=$this 

因为简单的$ user是新的实例,它的字段是空的!

+0

谢谢,这工作! 但它给了一个错误: 调用未知的方法:警予\网络\ UploadedFile的::保存() 我使用的是从警予本身 使用警予\网络\ UploadedFile的供应商扩展; 我的保存行: $ this-> file-> save(); –

+0

我想你应该使用saveAs(); –

+0

我设法让它工作, 我所做的是,最后一行从$ this到$ user,最后它为用户保存了注册表。 $ user-> picture ='uploads /'.$ imageName。'。'。$ this-> file-> extension; –

0

它看起来像你提错了文件路径,就不能不提ROOTPATH的保存功能 例如

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

我取代了符合你的,在根制成的上传文件夹,但仍然didnt工作和相同的错误.. –

0

我使用单独的上传功能上传文件,它的工作。

我的视图

<?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(); ?> 

控制器

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, 
     ]); 
    } 

和我的模型是

//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; 
      } 

    }