Yii2 — прямой вход в действие, которое вызывает обновление действия

Привет

У меня 3 категории пользователей, админ, соц и атлета.

То, что я хочу, чтобы войти в систему как Atleta и войти непосредственно в форму обновления этого пользователя

Проблема в том, что когда я делаю Login как atleta, он вызывает actionAtleta внутри UserController, но всегда выдает ошибку -> Bad request # 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,
]);
}
}

И … Вот это мой actionAtleta, внутри UserController:

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, но он всегда выдает ошибку Missing id при входе в систему.

Кто-нибудь знает почему ??

Большое спасибо

РЕДАКТИРОВАТЬ
Если я сделаю публичную функцию actionAtleta ($ id = 3), она войдет в actionAtleta и принесет форму для обновления для модели id = 3. Но я хочу, чтобы она обнаруживала при входе в систему идентификатор, который пытается сделать вход в систему, а затем запустить _form для обновления того, что нужно зарегистрированному пользователю.

0

Решение

Вы должны просто добавить пользователя 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-> перенаправления ().

1

Другие решения

использование

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

и обновите свой urlManager в конфигурации, чтобы

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