ユーザーデータを保存するために、フォームを/ 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!
_の呼び出し
任意の助けに感謝します。
Yii2では、アクションの結果をreturn()
する必要があります。リダイレクトの前にreturn
を追加する必要があると思います。
return $this->redirect(['user/index']);
beforeAction()でリダイレクトを実行しようとしている場合は、send()メソッドを使用する必要があります
return $this->redirect('/some/url',302)->send();
私はこれを試すまで、リダイレクトが非常に長く機能しないことに苦労しました。
変化する:
return $this->redirect('site/secure');
に:
return $this->redirect(['site/secure']);
つまり、[]括弧で囲む必要があります。私はPHP 7を使用しています。
この方法でもリダイレクトできます:
_return Yii::$app->response->redirect(['user/index', 'id' => 10]);
_
ヘッダー情報をすぐに送信する場合は、send()を使用します。このメソッドはLocation現在の応答のヘッダー。
_return Yii::$app->response->redirect(['user/index', 'id' => 10])->send();
_
完全なURLが必要な場合は、_use yii\helpers\Url;
_のヘッダーでUrl::to(['user/index', 'id' => 302])
のように使用します。
詳細については、 ここ を確認してください。これが誰かを助けることを願っています。
これを行う別の方法があります
if(!Yii::$app->request->getIsPost()) {
return Yii::$app->getResponse()->redirect(array('/user/index',302));
}
ブラウザを指定されたURLにリダイレクトします。
このメソッドは、「Location」ヘッダーを現在の応答に追加します。 send()が呼び出されるまでヘッダーを送信しないことに注意してください。コントローラアクションでは、このメソッドを次のように使用できます。
return Yii::$app->getResponse()->redirect($url);
他の場所で、「Location」ヘッダーをすぐに送信する場合は、次のコードを使用する必要があります。
Yii::$app->getResponse()->redirect($url)->send();
return;
exit(0);
は使用しないでください。 Yii::$app->end();
を使用します
あなたのコードは次のようになります
$this->redirect(['index'], 302);
Yii::$app->end();
つまり、実際の問題はPOSTリクエストを停止することでしたが、これはその問題に対する間違った解決策です(動作しますが)。 POSTリクエストを停止するには、 アクセス制御 を使用する必要があります。
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
],
],
];
}
これで試してみてください
if(!Yii::$app->request->getIsPost())
{
Yii::$app->response->redirect(array('user/index','id'=>302));
exit(0);
}