我面临的问题是返回上一页,如果有人帮助我会非常感激。 这是我的控制器登录操作
public function actionLogin() {
$this->layout = 'login';
if (!\Yii::$app->user->isGuest) {
return $this->goHome();
}
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
return $this->goBack();
} else {
return $this->render('login', [
'model' => $model,
]);
}
}
当我输入用户名和密码时,每件事情都正确但用户仍然在同一页面(登录页面)。我也尝试渲染一些其他视图或将其重定向到某个动作,但它不起作用。 当我在goBack()函数之前回显一些东西时,它工作正常,这意味着用户登录。
答案 0 :(得分:4)
您可以使用
return $this->redirect(Yii::$app->request->referrer);
return $this->goBack((
!empty(Yii::$app->request->referrer) ? Yii::$app->request->referrer : null
));
或
if(Yii::$app->request->referrer){
return $this->redirect(Yii::$app->request->referrer);
}else{
return $this->goHome();
}
答案 1 :(得分:2)
执行操作后,您可以记住每个被调用的操作。这可以在用户对象上使用setReturnUrl()
来完成(注意:匿名用户也存在用户对象)。如果这样做goBack()
按预期工作。
您致电setReturnUrl()
的地方位于afterAction event。您可以在应用程序配置中实现此功能(例如web.php)。它看起来像这样:
$config = [
'id' => 'foo-app',
'basePath' => dirname(__DIR__),
'params' => ...
'bootstrap' => ['log'],
'components' => ...,
'on afterAction' => function (yii\base\ActionEvent $e) {
if($e->action->id !== 'login' && $e->action->controller->id !== 'site')
Yii::$app->user->setReturnUrl(Yii::$app->request->url);
},
];
每次调用一个动作时都会调用 'on afterAction'
。在Yii::$app->request->url
中包含最后一个(当前)调用的完整网址。
我添加了if语句,因此不会存储带有site / login的URL,因为这不是您想要返回的页面。
我没有测试过这个。我希望它有效。根据{{3}}使用this discussion并不可靠。
还找到了一些信息Yii::$app->request->referrer。
答案 2 :(得分:0)
您需要在Config中分配您的用户/登录模型 打开web.php并添加您的登录/用户模型 例如。
'user' => [
'identityClass' => 'app\models\Users',
'enableAutoLogin' => true,
],