我认为我已经弄乱了Yii2的默认行为,但无法找出位置。
我有一个菜单/操作,需要登录用户访问。当用户单击菜单时,需要正确登录屏幕。
但是登录后,它应该重定向回到菜单操作,但它会转到仪表板。
我在用户控制器中的代码如下:
var query = (*/Working query*/)
var e = Expression.Parameter(typeof(Email), "e");
var param = Expression.PropertyOrField(e, "Subject");
var OrderParam = Expression.Lambda<Func<Email, string>>( param, e);
query.OrderBy(OrderParam);
和站点控制器中
select Subject from Emails order by Subject
需要登录的控制器/动作是保留/保留。
答案 0 :(得分:0)
对于您的情况,我建议使用yii2 AccessControl,以便一旦用户想要访问受限操作,它就会重定向到登录页面,用户可以在该页面上登录并重定向回预期的操作。
这是您的预订控制器类
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]);
},
],
];
}
一旦用户被重定向到预订登录页面,检查是否来自预订控制器登录,然后重定向回去,请确保您通过(URL参数控制器,以告知登录操作这不是正常登录),如下所示
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();
}
}
注意:您也可以使用会话向yii告知用户信息,而不是在操作网址中传递信息
答案 1 :(得分:-1)
好吧,我发现修改了哪些代码,然后将其修复。
代码就像
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();
所以在其他部分,我已经注释了各行并添加了goBack()