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