2017-07-13 5 views
0

i Profil Avatar im Frontend/web/site/Anmeldungen hinzugefügt werden soll, aber es ist ein Fehler sagte, esFehler bei dem Hinzufügen Bild in Anmeldeformular yii2 fortgeschritten

Unknown Methode - yii \ base \ UnknownMethodException unbekannt Aufruf Methode: Frontend \ models \ SignupForm :: save()

ist dies die signup.php am Frontend/Ansichten/site/signup.php

<?php 

/* @var $this yii\web\View */ 
/* @var $form yii\bootstrap\ActiveForm */ 
/* @var $model \frontend\models\SignupForm */ 

use yii\helpers\Html; 
use yii\bootstrap\ActiveForm; 

$this->title = 'Signup'; 
$this->params['breadcrumbs'][] = $this->title; 
?> 
<div class="site-signup"> 
    <h1><?= Html::encode($this->title) ?></h1> 

    <p>Please fill out the following fields to signup:</p> 

    <div class="row"> 
     <div class="col-lg-5"> 
      <?php $form = ActiveForm::begin(['id' => 'form-signup'],['options' => ['enctype' => 'multipart/form-data']]); ?> 

       <?= $form->field($model, 'first_name')->textInput(['placeholder' => "First Name"]) ?> 

       <?= $form->field($model, 'last_name')->textInput(['placeholder' => "Last Name"]) ?> 

       <?= $form->field($model, 'username')->textInput(['placeholder' => "Username"]) ?> 

       <?= $form->field($model, 'email')->textInput(['placeholder' => "Email"]) ?> 

       <?= $form->field($model, 'password')->passwordInput(['placeholder' => "Password"]) ?> 

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

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

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

dies der SiteController.php ist

<?php namespace frontend\controllers; 

use Yii; use yii\base\InvalidParamException; use yii\web\BadRequestHttpException; use yii\web\Controller; use yii\web\UploadedFile; use yii\filters\VerbFilter; use yii\filters\AccessControl; use common\models\LoginForm; use frontend\models\PasswordResetRequestForm; use frontend\models\ResetPasswordForm; use frontend\models\SignupForm; use frontend\models\ContactForm; 

/** * Site controller */ class SiteController extends Controller { 
    /** 
    * @inheritdoc 
    */ 
    public function behaviors() 
    { 
     return [ 
      'access' => [ 
       'class' => AccessControl::className(), 
       'only' => ['logout', 'signup'], 
       'rules' => [ 
        [ 
         'actions' => ['signup'], 
         'allow' => true, 
         'roles' => ['?'], 
        ], 
        [ 
         'actions' => ['logout'], 
         'allow' => true, 
         'roles' => ['@'], 
        ], 
       ], 
      ], 
      'verbs' => [ 
       'class' => VerbFilter::className(), 
       'actions' => [ 
        'logout' => ['post'], 
       ], 
      ], 
     ]; 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function actions() 
    { 
     return [ 
      'error' => [ 
       'class' => 'yii\web\ErrorAction', 
      ], 
      'captcha' => [ 
       'class' => 'yii\captcha\CaptchaAction', 
       'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, 
      ], 
     ]; 
    } 

    /** 
    * Displays homepage. 
    * 
    * @return mixed 
    */ 
    public function actionIndex() 
    { 
     return $this->render('index'); 
    } 

    /** 
    * Logs in a user. 
    * 
    * @return mixed 
    */ 
    public function actionLogin() 
    { 
     if (!Yii::$app->user->isGuest) { 
      return $this->goHome(); 
     } 

     $model = new LoginForm(); 
     if ($model->load(Yii::$app->request->post()) && $model->login()) { 
      return $this->goBack(); 
     } else { 
      return $this->render('login', [ 
       'model' => $model, 
      ]); 
     } 
    } 

    /** 
    * Logs out the current user. 
    * 
    * @return mixed 
    */ 
    public function actionLogout() 
    { 
     Yii::$app->user->logout(); 

     return $this->goHome(); 
    } 

    /** 
    * Displays contact page. 
    * 
    * @return mixed 
    */ 
    public function actionContact() 
    { 
     $model = new ContactForm(); 
     if ($model->load(Yii::$app->request->post()) && $model->validate()) { 
      if ($model->sendEmail(Yii::$app->params['adminEmail'])) { 
       Yii::$app->session->setFlash('success', 'Thank you for contacting us. We will respond to you as soon as possible.'); 
      } else { 
       Yii::$app->session->setFlash('error', 'There was an error sending your message.'); 
      } 

      return $this->refresh(); 
     } else { 
      return $this->render('contact', [ 
       'model' => $model, 
      ]); 
     } 
    } 

    /** 
    * Displays about page. 
    * 
    * @return mixed 
    */ 
    public function actionAbout() 
    { 
     return $this->render('about'); 
    } 

    /** 
    * Signs user up. 
    * 
    * @return mixed 
    */ 
    public function actionSignup() 
    { 
     $model = new SignupForm(); 
     if ($model->load(Yii::$app->request->post())) { 

      //upload file 
      $path = Yii::getAlias('@frontend') .'/web/upload/'; 
      $imageName = $model->username; 
      $model->file = UploadedFile::getInstance($model,'file'); 
      $model->file->saveAs('uploads/img/user'.$imageName.'.'.$model->file->extension); 
      $model->file->saveAs($path.$imageName.'.'.$model->file->extension); 
      //save in database 
      $model->avatar = 'uploads/'.$imageName.'.'.$model->file->extension; 
      $model->save(); 

      if ($user = $model->signup()) { 
       if (Yii::$app->getUser()->login($user)) { 
        return $this->goHome(); 
       } 
      } 
     }else{ 
      return $this->render('signup', [ 
       'model' => $model, 
      ]); 
     } 
    } 

    /** 
    * Requests password reset. 
    * 
    * @return mixed 
    */ 
    public function actionRequestPasswordReset() 
    { 
     $model = new PasswordResetRequestForm(); 
     if ($model->load(Yii::$app->request->post()) && $model->validate()) { 
      if ($model->sendEmail()) { 
       Yii::$app->session->setFlash('success', 'Check your email for further instructions.'); 

       return $this->goHome(); 
      } else { 
       Yii::$app->session->setFlash('error', 'Sorry, we are unable to reset password for the provided email address.'); 
      } 
     } 

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

    /** 
    * Resets password. 
    * 
    * @param string $token 
    * @return mixed 
    * @throws BadRequestHttpException 
    */ 
    public function actionResetPassword($token) 
    { 
     try { 
      $model = new ResetPasswordForm($token); 
     } catch (InvalidParamException $e) { 
      throw new BadRequestHttpException($e->getMessage()); 
     } 

     if ($model->load(Yii::$app->request->post()) && $model->validate() && $model->resetPassword()) { 
      Yii::$app->session->setFlash('success', 'New password saved.'); 

      return $this->goHome(); 
     } 

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


<?php 
namespace frontend\controllers; 

use Yii; 
use yii\base\InvalidParamException; 
use yii\web\BadRequestHttpException; 
use yii\web\Controller; 
use yii\web\UploadedFile; 
use yii\filters\VerbFilter; 
use yii\filters\AccessControl; 
use common\models\LoginForm; 
use frontend\models\PasswordResetRequestForm; 
use frontend\models\ResetPasswordForm; 
use frontend\models\SignupForm; 
use frontend\models\ContactForm; 

/** 
* Site controller 
*/ 

Klasse SiteController erweitert Controller-

und das ist die SignupForm.php am Frontend/models/SignupForm.php

<?php 
namespace frontend\models; 

use yii\base\Model; 
use common\models\User; 

/** 
* Signup form 
*/ 
class SignupForm extends Model 
{ 
    public $first_name; 
    public $last_name; 
    public $username; 
    public $email; 
    public $password; 
    public $avatar; 
    public $file; 

    /** 
    * @inheritdoc 
    */ 
    public function rules() 
    { 
     return [ 
      ['first_name', 'required'], 

      ['last_name', 'required'], 

      [['file'],'file', 'extensions'=>'jpg, gif, png'], 

      ['username', 'trim'], 
      ['username', 'required'], 
      ['username', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This username has already been taken.'], 
      ['username', 'string', 'min' => 2, 'max' => 255], 

      ['email', 'trim'], 
      ['email', 'required'], 
      ['email', 'email'], 
      ['email', 'string', 'max' => 255], 
      ['email', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This email address has already been taken.'], 

      ['password', 'required'], 
      ['password', 'string', 'min' => 6], 
     ]; 
    } 

    /** 
    * Signs user up. 
    * 
    * @return User|null the saved model or null if saving fails 
    */ 
    public function signup() 
    { 
     if (!$this->validate()) { 
      return null; 
     } 

     $user = new User(); 
     $user->first_name = $this->first_name; 
     $user->first_name = $this->first_name; 
     $user->username = $this->username; 
     $user->email = $this->email; 
     $user->setPassword($this->password); 
     $user->generateAuthKey(); 
     $user->avatar = $this->file; 

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

Antwort

0

In Ihrem Controller SiteController, in Aktion actionSignup() Sie verwenden:

$model->save() 

Ihr Modell erweitert sich nicht Klasse, so dass es keine Methode save().

Entfernen Sie diese $model->save() vom Controller, Sie speichern Benutzer sowieso in Methode signup().

+0

Noch Fehler, jetzt sagte, es –

+0

noch Fehler, jetzt sagte, es PHP Warnung - yii \ base \ Error finfo_file (E: \ Xampp \ tmp \ php4DF3.tmp): failed to open stream: No solche Datei oder Verzeichnis Warum? –

+0

Weil Sie die Methode 'saveAs()' zwei Mal aufrufen. Entfernen Sie eine Verwendung oder fügen Sie beim ersten Aufruf einen zweiten Parameter hinzu, um die temporäre Datei nicht zu löschen '-> saveAs ($ filePath, false);' – Yupik