Yii2返回$ this-> goBack()不工作

时间:2017-05-03 12:18:15

标签: redirect yii2 return

我面临的问题是返回上一页,如果有人帮助我会非常感激。 这是我的控制器登录操作

    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()函数之前回显一些东西时,它工作正常,这意味着用户登录。

3 个答案:

答案 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,
    ],