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

And*_*eas 22 redirect yii2

我将表单发布到/ user/save以保存用户数据.如果$ _SERVER ['REQUEST_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
Run Code Online (Sandbox Code Playgroud)

无法使重定向工作.虽然!Yii::$app->request->getIsPost() is false打电话给$this->redirect does nothing!

任何帮助赞赏.

Den*_*G B 50

在Yii2中,我们需要动作return()的结果.我认为你需要return在重定向前添加一个.

  return $this->redirect(['user/index']);
Run Code Online (Sandbox Code Playgroud)


小智 27

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

 return $this->redirect('/some/url',302)->send();
Run Code Online (Sandbox Code Playgroud)

  • 这应该是选定的答案 (4认同)

lal*_*mar 9

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

return Yii::$app->response->redirect(['user/index', 'id' => 10]);
Run Code Online (Sandbox Code Playgroud)

如果您想立即发送 Header 信息,请使用send()。此方法将一个Location标头添加到当前响应中。

return Yii::$app->response->redirect(['user/index', 'id' => 10])->send();
Run Code Online (Sandbox Code Playgroud)

如果您想要完整的 URL,请使用 likeUrl::to(['user/index', 'id' => 302])use yii\helpers\Url;.

有关更多信息,请查看此处。希望这会帮助某人。


小智 7

我挣扎着重定向不能长时间工作,上面提到的都没有为我工作,直到我尝试了这个:

更改:

return $this->redirect('site/secure');
Run Code Online (Sandbox Code Playgroud)

至:

return $this->redirect(['site/secure']);
Run Code Online (Sandbox Code Playgroud)

换句话说,需要将它括在[]括号内!我使用PHP 7,可能是为什么?


小智 5

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

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

return Yii::$app->getResponse()->redirect($url);
Run Code Online (Sandbox Code Playgroud)

在其他地方,如果您想立即发送“Location”标头,您应该使用以下代码:

Yii::$app->getResponse()->redirect($url)->send();
return;
Run Code Online (Sandbox Code Playgroud)