我将表单发布到/ 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
无法让重定向工作。虽然!Yii::$app->request->getIsPost() is false
呼叫$this->redirect does nothing!
任何帮助表示感谢。
答案 0 :(得分:47)
在Yii2中,我们需要return()
操作的结果。我认为您需要在重定向前添加return
。
return $this->redirect(['user/index']);
答案 1 :(得分:23)
如果您尝试在 beforeAction()中进行重定向,则应使用 send()方法
return $this->redirect('/some/url',302)->send();
答案 2 :(得分:7)
我挣扎着重定向不能长时间工作, 上面提到的都不适用于我,直到我尝试了这个:
更改:
return $this->redirect('site/secure');
为:
return $this->redirect(['site/secure']);
换句话说,需要将它括在[]括号内! 我使用PHP 7,可能是为什么?
答案 3 :(得分:3)
您也可以通过此方法重定向:
return Yii::$app->response->redirect(['user/index', 'id' => 10]);
如果您想立即发送标题信息,请使用发送()。此方法会在当前响应中添加位置标题。
return Yii::$app->response->redirect(['user/index', 'id' => 10])->send();
如果您需要完整的网址,请使用Url::to(['user/index', 'id' => 302])
标题use yii\helpers\Url;
。
有关详情,请查看Here。 希望这会对某人有所帮助。
答案 4 :(得分:2)
这是另一种方法
if(!Yii::$app->request->getIsPost()) {
return Yii::$app->getResponse()->redirect(array('/user/index',302));
}
答案 5 :(得分:1)
尝试
if(!Yii::$app->request->getIsPost())
{
Yii::$app->response->redirect(array('user/index','id'=>302));
exit(0);
}
答案 6 :(得分:1)
将浏览器重定向到指定的网址。
此方法为当前响应添加“Location”标头。请注意,在调用send()之前,它不会发送标头。在控制器操作中,您可以按如下方式使用此方法:
return Yii::$app->getResponse()->redirect($url);
在其他地方,如果您想立即发送“位置”标题,则应使用以下代码:
Yii::$app->getResponse()->redirect($url)->send();
return;
答案 7 :(得分:1)
不要使用exit(0);
这在最好的时候是不好的做法。使用Yii::$app->end();
所以你的代码看起来像
$this->redirect(['index'], 302);
Yii::$app->end();
虽然说实际问题是停止POST请求,但这是解决该问题的错误方法(尽管它确实有效)。要停止POST请求,您需要使用access control。
public function behaviors()
{
return [
'access' => [
'class' => \yii\filters\AccessControl::className(),
'only' => ['create', 'update'],
'rules' => [
// deny all POST requests
[
'allow' => false,
'verbs' => ['POST']
],
// allow authenticated users
[
'allow' => true,
'roles' => ['@'],
],
// everything else is denied
],
],
];
}