2017-04-10 63 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