2017-04-10 98 views
0

我有問題。假設我們有這樣一個模型:保存表單資料Yii2

/** 
* This is the model class for table "user". 
* 
* @property integer $id 
* @property string $username 
* @property string $first_name 
* @property string $last_name 
*/ 
class User extends \yii\db\ActiveRecord 
{ 
    public static function tableName() 
    { 
     return 'user'; 
    } 

    public function rules() 
    { 
     return [ 
      // some rules for fields 
     ]; 
    } 

    public function attributeLabels() 
    { 
     return [ 
      // some attributes 
     ]; 
    } 

現在我想創建更新表單模型(例如)first_name。所以我創建了下一個表單模型:

class UpdateUserFirstNameForm extends Model 
{ 
    public $first_name 

    public function rules() 
    { 
     return [ 
      // some rules for first_name 
     ]; 
    } 

問題是 - 我如何保存這個表單?我必須寫在控制器中?

+0

你'user'表,有一個名爲場'first_name'? – gmc

+0

是的,當然。你可以在@property中看到用戶模型 –

回答

0

我會爲用戶創造的idUpdateUserFirstNameForm另一個屬性,讓我們說id_user。然後,在您的表單中創建一個帶有用戶標識的activeHiddenField(以及用戶名字的文本輸入)。

現在控制器,你的帖子內容加載到你的模型,找到ID的用戶和更新User模式與新的名字:

$model = new UpdateUserFirstNameForm(); 
if ($model->load(Yii::$app->request()->post() and $model->validate()) { 
    $user = User::findOne($model->id_user); 
    if ($user == null) 
    throw new NotFoundHttpException(); 
    $user->first_name = $model->first_name; 
    $user->save(); 
} 
+0

OK,另一種情況是:在我規則中的user模型中有一個'last_name' =>需要。當我調用'save'方法更新'first_name'字段時 - 將會出錯,因爲'save'方法會調用'validate'方法。 –

+0

但是,如果您從您的db中找到您的用戶並返回一條記錄,則數據應該是正確的,對嗎? – gmc

+0

是的。我想是這樣。 –

0

爲什麼你想創建另一個模型UpdateUserFirstNameForm,當你有一個,你可以在你的控制器內做任何事情。更新,保存或刪除。而

class UpdateUserFirstNameForm extends Model 

是隻用於驗證,沒有訪問DB