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

时间:2016-08-08 20:17:09

标签: php redirect yii2

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

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

return Yii::$app->getResponse()->redirect(Url::to('login/user-logout'));

不起作用。

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

不起作用。我们尝试使用和不使用Url :: to()。

我能够在检查401响应的条件中获得Yii :: trace()。它工作正常。所以问题不是检测401状态代码,而是重定向。

1 个答案:

答案 0 :(得分:1)

应该工作

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

可能导致您无法正常工作的原因:

  1. 这是ajax / pjax请求。
  2. 您使用了错误路由的冗余Url :: to()。
  3. 您期望POST请求,logout操作通常就是这种情况。
  4. 401意味着它可能是#3。尝试使用相同的重定向机制,但指向其他路由和/或删除verb POST操作的user-logout行为以验证它。