yii2

2016-09-21 3 views
0

я узнал немного о yii2 рамках, но я получил Wich ошибки я не могу решить ..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

Спасибо, это сработало! Но это дает следующее сообщение об ошибке: Вызов неизвестный метод: юй \ Web \ UploadedFile :: сохранить() Я использую расширение поставщика от Yii самого использование юй \ Web \ UploadedFile; My save line: $ 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

я заменил линию с вашими, и сделал дата загрузки папку в корневом каталоге, но все еще не работа и такая же ошибка .. –

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

    } 
Смежные вопросы