Redirect 控制器操作中的yii2重定向不起作用?

Redirect 控制器操作中的yii2重定向不起作用?,redirect,yii2,Redirect,Yii2,为了保存用户数据,我正在将表单发布到/user/save。如果$\u服务器['REQUEST\u METHOD']不是'post',则尝试重定向用户时会出现问题 我的用户控制器代码 namespace app\controllers; use Yii; use yii\web\Controller; use app\models\MyUser; class UserController extends Controller { public function actionSave() {

为了保存用户数据,我正在将表单发布到/user/save。如果$\u服务器['REQUEST\u METHOD']不是'post',则尝试重定向用户时会出现问题

我的用户控制器代码

namespace app\controllers;
use Yii;
use yii\web\Controller;
use app\models\MyUser;

class UserController extends Controller {

public function actionSave() {

    if(!Yii::$app->request->getIsPost()) {
       $this->redirect('/user/index',302);
       exit(0);
   }

   //do something to save user submitted data       
}

}//~CLASS
无法使重定向正常工作。虽然
!Yii::$app->request->getIsPost()为false
$this->redirect的调用没有任何作用


非常感谢您的帮助。

试试这个

if(!Yii::$app->request->getIsPost()) 
{
  Yii::$app->response->redirect(array('user/index','id'=>302));
    exit(0);
}

在Yii2中,我们需要
return()
操作的结果。我认为您需要在重定向之前添加一个
return

  return $this->redirect(['user/index']);

这是另一种方法

if(!Yii::$app->request->getIsPost()) {
    return Yii::$app->getResponse()->redirect(array('/user/index',302));
}

如果您试图在beforeAction()中执行重定向,则应使用send()方法

 return $this->redirect('/some/url',302)->send();

将浏览器重定向到指定的URL

此方法向当前响应添加“位置”标题。请注意,在调用send()之前,它不会发送头。在控制器操作中,您可以按如下方式使用此方法:

return Yii::$app->getResponse()->redirect($url);
在其他地方,如果要立即发送“位置”标题,应使用以下代码:

Yii::$app->getResponse()->redirect($url)->send();
return;

我挣扎在重定向上,没有工作很长时间, 在我尝试以下方法之前,上述所有方法都不适用于我:

更改:

return $this->redirect('site/secure');
致:

换句话说,需要将其括在[]括号内! 我使用的是PHP7,可能是原因吧?

不要使用
exit(0)在最好的时候,这是不好的做法。使用
Yii::$app->end()

所以你的代码看起来像

$this->redirect(['index'], 302);
Yii::$app->end();
也就是说,虽然实际问题是停止POST请求,但这是解决该问题的错误方法(尽管它确实有效)。要停止POST请求,您需要使用


您也可以通过此方法重定向:

return Yii::$app->response->redirect(['user/index', 'id' => 10]);
如果要立即发送标题信息,请与send()一起使用。此方法将位置标题添加到当前响应中

return Yii::$app->response->redirect(['user/index', 'id' => 10])->send();
如果您想要完整的URL,请使用类似
URL::to(['user/index','id'=>302])
的标题
use yii\helpers\URL

有关更多信息,请查看。
希望这能对某人有所帮助。

您似乎指的是YII v.1.X代码。这是Yii v.1.X代码吗?谢谢,但请使用url::to()类提供更好的url。。最佳regardsReturn to函数对于重定向不是必需的。如果在重定向后使用exit,则它将不起作用。正在发生的事情不知道下面有一个答案,如果您在操作之前使用inside…“如果您试图在beforeAction()中执行重定向,则应使用send()方法”
return$this->redirect('/some/url',302)->send()仅供参考,请参考此链接:括在
[]
括号内的是Yi2标准。是的,这就是array()的作用,我现在明白了!尽管如此,我还是感到困惑,为什么我最新的Yi2教程在重定向('text')命令上既没有使用['text']也没有使用数组('text')。谢谢,这是我的问题。这应该是选择的答案
return Yii::$app->response->redirect(['user/index', 'id' => 10]);
return Yii::$app->response->redirect(['user/index', 'id' => 10])->send();