Yii2 - 直接登录到调用操作更新的操作


Yii2 - Direct Login to action that calls action update

>问候

我有 3 类用户,管理员、社交和竞技。

我想要的是以atleta身份登录并直接进入该用户的更新表单

问题是,当我以 atleta 身份登录时,它会在用户控制器内调用 actionAtleta,但总是抛出错误 -> 错误请求 #400 缺少必需参数:id

这是我的站点控制器代码:

public function actionLogin()
{
    if (!'Yii::$app->user->isGuest) {
        return $this->goHome();
    }
    $model = new LoginForm();
    if ($model->load(Yii::$app->request->post()) && $model->login() && $model->user->categoria == 'admin') 
        {
            return $this->goBack();
        } 
    else if ($model->load(Yii::$app->request->post()) && $model->login() && $model->user->categoria == 'socio')
        {
            $this->redirect(Url::toRoute(['user/socio']));
        }
    else if ($model->load(Yii::$app->request->post()) && $model->login() && $model->user->categoria == 'atleta')
        {
            $this->redirect(Url::toRoute(['user/atleta']));
        }
    else {
        return $this->render('login', [
            'model' => $model,
        ]);
    }
}

和。。。这是我在用户控制器中的动作Atleta:

public function actionAtleta($id)
{
    $model = $this->findModel($id);
    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('update', [
            'model' => $model,
        ]);
    }
}

我尝试了几种传递$id的方法,但它在登录时总是抛出缺少 id 错误

有人知道为什么??

非常感谢

编辑如果我使公共函数 actionAtleta($id=3(,它会进入 actionAtleta 并更新模型 id = 3 的表单。但我想要的是它在登录时检测到 id 正在尝试登录,然后触发_form以更新登录用户所需的任何内容。

您应该简单地将用户id参数添加到路由中,例如:

if ($model->load(Yii::$app->request->post()) && $model->login()) {
        switch($model->user->categoria) {
            case 'admin' :
                return $this->goBack();
                break;
            default : 
                return $this->redirect(['user/'.$model->user->categoria, 'id'=>$model->user->id]);
        }
}

并且不要忘记您需要返回$this->redirect((。

使用

$this->redirect(Url::toRoute(['user/atleta/'.$Yii::$app->user->id]));

并将配置中的网址管理器更新为

'urlManager' => [
        'rules' => [
            'user/atleta/<id:'d+>' => 'user/atleta',
        ]
    ],