在同一动作中使用相同模型的差异形式

时间:2016-01-11 15:15:37

标签: php forms post yii2

我的个人资料页面有3种形式:

  • 头像形式
  • 用户表单
  • 用户元数据表单 现在,我的控制器中有2个和3个(2个不同的型号),但是当我发送头像表单(仅更新头像)或用户表单(仅更新电子邮件)时,我不知道如何管理

有什么方法可以控制什么形式发送然后更新所需的属性或我们的模型?所以我可以更改发送表单的电子邮件,或更改发送其他表单的头像(相同型号)。

这是我的实际行动:

public function actionIndex()
    {
        $model = Yii::$app->user->identity;
        $userMeta = PgcUsersMeta::findOne(['fk_user' => $model->id]);

        //Si queremos cambiar el email
        if ($model->load(Yii::$app->request->post()) && $model->update(true, ["email"])
        || ($userMeta->load(Yii::$app->request->post()) && $userMeta->update())) {
            Yii::$app->getSession()->setFlash('profile-Msg-OK', Yii::t("app","Generic_Changes_OK"));
            return $this->redirect(['index']);
        } else {
            return $this->render('index', [
                'model' => $model,
                'userMeta' => $userMeta,
            ]);
        }

    }

1 个答案:

答案 0 :(得分:1)

您可以通过查看UploadedFile实例来检查用户是否上传了头像。这是一个示例(假设您的模型的属性名称是头像

$model->avatar = UploadedFile::getInstance($model, 'avatar');
if ($model->avatar) {
    // do stuff
}

作为另一种选择,考虑将这三种形式分成三种不同的控制器动作,例如: 个人资料/更新头像个人资料/更新电子邮件个人资料/更新元。因此,对于上传头像,您的表单操作就像<form action="profile/update-avatar">等等