Php Yii2-登录后重定向回操作

Php Yii2-登录后重定向回操作,php,yii2,Php,Yii2,我想我已经搞乱了Yii2的默认行为,但无法找到它的位置 我有一个菜单/操作,需要登录用户访问。当用户点击菜单时,需要正确登录屏幕 但是在登录之后,它应该重定向回菜单操作,但是它正在进入仪表板 我在user controller中的代码如下所示: public function beforeAction($action) { if (Yii::$app->user->isGuest) { return $this->goHome(); } els

我想我已经搞乱了Yii2的默认行为,但无法找到它的位置

我有一个菜单/操作,需要登录用户访问。当用户点击菜单时,需要正确登录屏幕

但是在登录之后,它应该重定向回菜单操作,但是它正在进入仪表板

我在user controller中的代码如下所示:

public function beforeAction($action) {

    if (Yii::$app->user->isGuest) {
        return $this->goHome();
    } elseif (Yii::$app->user->identity->user_role == "admin") {
        $this->layout = '@app/themes/admin/main';
    }
    return parent::beforeAction($action);
}
和现场控制器

public function actionLogin() {
    if (!Yii::$app->user->isGuest) {
        return $this->goHome();
    }
    $login = new LoginForm(['scenario' => 'login']);

...

需要登录的控制器/操作是reservation/reservation。

好的,我找到了修改的代码,并修复了它

代码就像

if (Yii::$app->user->identity->user_role != 'user') {

            $path = "../" . Yii::$app->user->identity->user_role;

            return $this->redirect($path);
        } else {
            //$path = "../" . Yii::$app->user->identity->user_role . "/view";
            // return $this->redirect($path);

                        return $this->goBack();

因此,在else部分中,我对这些行进行了注释,并为您的案例添加了我建议使用的goBack,以便一旦用户想要访问受限操作,它将重定向到登录页面,用户可以在该页面登录并重定向回预期操作。这是预订控制器类中的示例访问筛选器

一旦用户被重定向到预订登录页面,检查是否来自预订控制器登录他,然后重定向回,确保您传递url参数控制器,告诉登录操作这不是正常登录,如下所示


注意:您也可以使用session告诉yii有关用户信息,而不是在行动url中传递信息

您不应该使用绝对路径,这不是最佳做法。您将哪一行标识为绝对路径?对不起,这是相对路径,在第3行$path=/
 public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'only' => ['reservation'],
            'rules' => [
                [
                    'allow' => true,
                    'actions' => ['reservation'],
                    'roles' => ['@'],
                ],
            ],
            'denyCallback' => function ($rule, $action) {
                $this->redirect(['user/reservation-login', 'controller' => \Yii::$app->controller->id]);
            },
        ],
    ];
}
public function actionReservationLogin($controller = null)
{
    if ($controller == 'reservation'){
         $model = new LoginForm(['scenario' => 'login']);
         if ($model->load(Yii::$app->request->post()) && $model->login()) {
           return $this->goBack();
        }
    }

    if (!Yii::$app->user->isGuest) {
        return $this->goHome();
    }
}