2015-04-02 109 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