Updating a record in Yii 2

Diving into this new yii 2 and Im already stuck. Im trying to update a user record using a form. The original record is loaded into the form, but changing the values ​​in the form does not update the record.

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

+4
source share
1 answer

If you use the model Useras https://github.com/yiisoft/yii2-app-advanced/blob/master/common/models/User.php

You can create a class Profileas follows:

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

And a change in the controller

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

to

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

All Articles