2015-04-02 50 views
4

潛入這個新的yii 2並且Im已經卡住了。我正在嘗試用表單更新用戶記錄。原始記錄正在窗體中加載,但更改窗體中的值不會更新記錄。更新Yii 2中的記錄

public function actionUserprofile() 
{ 
    $id = Yii::$app->user->identity->id; 
    $model = User::find()->where(['id' => $id])->one(); 

    if($model->load(Yii::$app->request->post()) && $model->save()) 
    { 
     Yii::$app->session->setFlash('success','You have updated your profile.'); 

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



} 

//view form 
<div> 

<?php $form = ActiveForm::begin(); ?> 
<?= $form->field($model, 'username')->textInput(['maxlength' => 255]) ?> 
<?= $form->field($model, 'first_name')->textInput(['maxlength' => 255]) ?> 
<?= $form->field($model, 'last_name')->textInput(['maxlength' => 255]) ?> 
<div class="form-group"> 
    <?= Html::submitButton('Submit',['class'=>'btn btn-success']) ?> 
</div> 
<?php ActiveForm::end(); ?> 

+0

很可能它沒有通過驗證。顯示模型規則,場景(如果有)以及您嘗試保存的數據。 – arogachev 2015-04-02 16:00:33

回答

1

如果你使用User模型這樣https://github.com/yiisoft/yii2-app-advanced/blob/master/common/models/User.php

您可以創建Profile類這樣的:

<?php 
namespace frontend\models; 
use common\models\User; 
use yii\base\Model; 
use Yii; 
/** 
* Signup form 
*/ 
class Profile extends Model 
{ 
    public $username; 
    public $first_name; 
    public $last_name; 
    /** 
    * @inheritdoc 
    */ 
    public function rules() 
    { 
     return [ 
      ['username', 'filter', 'filter' => 'trim'], 
      ['username', 'required'], 
      ['username', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This username has already been taken.'], 
      ['username', 'string', 'min' => 2, 'max' => 255], 
      [['first_name', 'last_name'], 'filter', 'filter' => 'trim'], 
      [['first_name', 'last_name'], 'required'], 

      [['first_name', 'last_name'], 'string', 'max' => 255], 
     ]; 
    } 
    /** 
    * Signs user up. 
    * 
    * @return User|null the saved model or null if saving fails 
    */ 
    public function profileSave() 
    { 
     if ($this->validate()) { 
      $user = User::findOne(Yii::$app->user->id); 
      $user->username = $this->username; 
      $user->first_name = $this->first_name; 
      $user->last_name = $this->last_name; 

      if ($user->save()) { 
       return $user; 
      } 
     } 
     return null; 
    } 
} 

而且在控制人變更情況

$model = User::find()->where(['id' => $id])->one(); 
if($model->load(Yii::$app->request->post()) && $model->save()) 

$model = new Profile(); 
if($model->load(Yii::$app->request->post()) && $model->profileSave()) 
+0

看起來像我在找什麼,但爲什麼沒有找到profileSave()?我添加了使用前端\ models \ Profile;到現場控制器。 userprofileaction位於站點控制器中。我在這裏錯過了什麼? – 2015-04-02 18:38:54

+0

對不起,我失去了申報模式。我編輯答案。添加'$ model = new Profile();' – 2015-04-03 04:17:31