web-dev-qa-db-ja.com

POST route in Laravel

私のコントローラーには、POSTルートにリダイレクトするメソッドがあります。このルートをGETルートにすることもできません。解決策はありますか?

私のコントローラーコードは次のようになります:

// After a bunch of other if statements, etc
return redirect('newUser')->with('user', $user);

これで、私のルート(web.php内)は次のようになります。

Route::post('/newUser', function() {
    $user=session('user');
    dd($user);
    return view('profileNewUser', $user);
});

私にスローされるエラーはMethodNotAllowedHTTPExceptionです。

エラーが_tokenに関係していることはわかっていますが、とにかくトークンフィールドの受け渡しを許可できますか?リダイレクトでwithを使用して渡そうとしましたが、それも機能しません。

ご協力いただきありがとうございます。

4
Muhammad

URLは「newUser」である必要があるため、同じURLのGETルートを作成するだけです。

POSTリクエストを同じルートに返したい理由に関する質問は、同じルートの無限の呼び出しにつながる可能性があるため、引き続き有効です。 。

ただし、1つの方法は、ユーザーがすでにセッションに参加しているかどうかを確認するロジックを追加してから、そうでない場合は、この種のパターンはあまり適切ではないということです。

最善の方法は、POSTの応答を返すページを、ビューをレンダリングするページから分離することです。

コメントで提案したように、このgetUserルートをコントローラーに移動してから、Laravelのアクションへの応答またはその他の方法を使用できます。 これが答えです 閲覧したい場合に備えて。

PS:私の答えは、あなたの質問に対する私の理解に基づいています。ありがとうございました。

名前付きルートにリダイレクトしてみてください。

Route::post('/newUser', function() {
    $user=session('user');
    dd($user);
    return view('profileNewUser', $user);
})->name('newusr');

次に:

return redirect()->route('newusr', ['user'=>$user]);

または、コントローラーのアクションにリダイレクトします。

1
CoursesWeb

私が見る限り、あなたは以下を使用することによってのみポストルートにリダイレクトすることができます:

return back()->withInput(['postvar1' => 'postval1']);  // L5.5

これは、フォームリクエストにエラーがある場合に使用されます。

0
omarjebari