>问候
我有 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',
]
],