【问题标题】:Yii2: Execute a redirect from static non-controller contextYii2:从静态非控制器上下文执行重定向
【发布时间】:2016-12-14 17:40:03
【问题描述】:

我有一个调用我们的 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状态码的检测,而是重定向。

【问题讨论】:

    标签: php redirect yii2


    【解决方案1】:

    应该工作

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-21
      • 2023-03-31
      • 2012-11-02
      • 2011-11-03
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多