2015-04-02 15 views
4

Дайвинг в этот новый yii 2 и Im уже застрял. 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

ответ

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

выглядит так, как я и ищу, но почему профильSave() не найден? Я добавил использование frontend \ models \ Profile; к контроллеру сайта. Пользовательпрофилирование находится в контроллере сайта. Что мне здесь не хватает? –

+0

Извините, я потерял модель объявления. Я редактирую ответ. Добавить '$ model = new Profile();' –

Смежные вопросы