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;
class Profile extends Model
{
public $username;
public $first_name;
public $last_name;
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],
];
}
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())
source
share