@hollanditkzn

Есть ли возможность упрощение кода?

У меня код при авторизации, где пользователь в зависимости от роли попадает на ту страницу, которая соответствует роли
public function actionLogin()
    {
        if (!Yii::$app->user->isGuest) {
            return $this->goHome();
        }

        $model = new LoginForm();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
            $id_user = Yii::$app->user->identity->getId();
            if (Yii::$app->user->can('shop')) {
                return $this->redirect(['zakaz/shop']);
            } elseif (Yii::$app->user->can('admin')) {
               return $this->redirect(['zakaz/admin']);
           } elseif (Yii::$app->user->can('disain')) {
               return $this->redirect(['zakaz/disain']);
           } elseif (Yii::$app->user->can('master')) {
               return $this->redirect(['zakaz/master']);
           } elseif (Yii::$app->user->can('courier')) {
               return $this->redirect(['courier/index']);
           }
            return $this->redirect(['zakaz/index', 'id'=> $id_user]);
        } else {
            return $this->render('login', [
                'model' => $model,
            ]);
        }
    }


Он у меня немного получился громоздкий от elseif, возможно есть идеи как его укоротить в контролере
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
Austin_Powers
@Austin_Powers
Web developer (Symfony, Go, Vue.js)
Забей наимнования ('shop') и адреса ('zakaz/shop') в ассоциативный массив. И перебирай в цикле:
foreach ($routes as $key => $value) {
  if (Yii::$app->user->can($key)) {
        return $this->redirect([$value]);
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы