【问题标题】:Yii2 return $this->goBack() Not WorkingYii2 返回 $this->goBack() 不工作
【发布时间】:2017-05-03 12:18:14
【问题描述】:

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

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

【问题讨论】:

  • 看文档:yiiframework.com/doc-2.0/… 之前需要设置URL,让goBack()知道去哪里。
  • 你能告诉在哪个文件中以及如何设置returnUrl???

标签: redirect yii2 return


【解决方案1】:

你可以使用

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();
}

【讨论】:

  • 仍然有同样的问题
【解决方案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 中包含最后一个(当前)称为完整 URL。

我添加了 if 语句,这样带有站点/登录名的 URL 就不会被存储,因为这不是您想要返回的页面。

我没有测试过这个。我希望它有效。根据this discussion 使用Yii::$app->request->referrer 是不可靠的。

还找到了一些信息here

【讨论】:

  • 仍然有同样的问题
  • @Dani 你还有什么特别的吗? AccessControl 实现/使用还是派生的 User 类?据我所知,yii2-app-advanced 或 yii2-app-basic 中的默认登录过程应该已经具有开箱即用的所需行为。以及如何调用站点/登录名?
  • 对不起,我已经从 yii2 改进版实现了登录系统。我仍然遇到同样的问题,请帮我解决这个问题,非常感谢
  • @Dani 哪个改进版本?如果没有任何进一步的信息,我无法为您提供帮助。
  • 如果在config 中作为on beforeAction 事件使用,这将无法正常工作,如果我在一个页面上说lead/index 并单击注销并再次登录它不会带我到那个页面但它将debug/default/toolbar?tag=5b8d0c22544a8 添加为返回网址并在登录后重定向到该页面,知道这里可能有什么问题,我有YII_DEBUG=>true
【解决方案3】:

您需要在配置中分配您的用户/登录模型 打开 web.php 并添加您的登录名/用户模型 例如。

 'user' => [
        'identityClass' => 'app\models\Users',
        'enableAutoLogin' => true,
    ],

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    相关资源
    最近更新 更多