Yii2:从静态非控制器上下文执行重定向

Jos*_*ton 1 php redirect yii2

我有一个调用我们的 API 的函数,称为executeGetRequest(具有其他 HTTP 方法的变体)。它是静态的并且位于基类中。它是从控制器调用的。如果 API 返回 401 HTTP 状态代码,executeGetRequest 应将用户重定向到“前端”Yii2 项目上的注销页面,以清除过期的会话数据。

我和我的同事尝试了多种不同的重定向方法。$this->redirect() 将不起作用,因为静态上下文中没有 $this 对象。

return Yii::$app->getResponse()->redirect(Url::to('login/user-logout'));
Run Code Online (Sandbox Code Playgroud)

不起作用。

Yii::$app->getResponse()->redirect(Url::to('login/user-logout'))->send();
return;
Run Code Online (Sandbox Code Playgroud)

不起作用。我们在使用和不使用 Url::to() 的情况下尝试了这些。

我能够在检查 401 响应的条件中获得 Yii::trace() 。效果很好。所以问题不在于401状态码的检测,而在于重定向。

Biz*_*ley 5

应该有效

Yii::$app->response->redirect(['login/user-logout'])->send(); return;
Run Code Online (Sandbox Code Playgroud)

它在您的情况下不起作用的可能原因:

  1. 这是 ajax/pjax 请求。
  2. 您使用了冗余的 Url::to() 和错误的路由。
  3. 您正在等待 POST 请求,这通常是操作的情况logout

401意味着它可能是#3。尝试相同的重定向机制,但指向其他路由和/或删除POST 操作verb的行为user-logout来验证它。