Redirect yii2在init中重定向是否有效?

Redirect yii2在init中重定向是否有效?,redirect,yii2,init,Redirect,Yii2,Init,我已经覆盖了控制器。当我尝试做过滤器时,我发现了这个问题。我很困惑,有什么帮助吗?来自Yii2文档: 如果操作不应运行,则应处理请求 通过提供必要的 输出或重定向请求。否则,响应将是无效的 空的 Yii2不关心init()函数的返回值。应用程序仍将继续运行操作。 关于redirect()函数,直到应用程序完成(beforeActionreturn false或action return)它才会工作。因此,当您在init()函数中调用redirect()时,什么都不会发生。 但是return$th

我已经覆盖了控制器。当我尝试做过滤器时,我发现了这个问题。我很困惑,有什么帮助吗?

来自Yii2文档:

如果操作不应运行,则应处理请求 通过提供必要的 输出或重定向请求。否则,响应将是无效的 空的

Yii2不关心
init()
函数的返回值。应用程序仍将继续运行操作。 关于
redirect()
函数,直到应用程序完成(
beforeAction
return false或action return)它才会工作。因此,当您在
init()
函数中调用
redirect()
时,什么都不会发生。
但是
return$this->redirect('/login')它可以工作。为什么?因为在这种情况下,应用程序会在运行操作后重定向。

您可以尝试,甚至可以编写
$this->重定向('/login')它仍然有效。

谢谢你的回答,但我不得不使用“echo$this->redirect('/purchaser/manifest')”。至少我知道原因。
class TestController extends Controller {
    function init() {
       if(!(strtolower(yii::$app->requestedRoute) == "account/login" || empty(yii::$app->requestedRoute)))
       {
           if (false===$this->isLogin()) {

               return $this->redirect('/login');   //it works, will redirect

           }
       } else {
           if($this->isLogin()) {
               return $this->redirect('/purchaser/manifest');   //not work, won't redirect
                //echo $this->redirect('/purchaser/manifest');    //work


           }
       }
   }
}
public function beforeAction($action)
{
    if (!parent::beforeAction($action)) {
         return false;
    }
    // your custom code here
    //Eg
    if(something){
         $this->redirect('/login');
         return false; //not run the action
    }

    return true; // continue to run action
}