Laravel 5.7 でお問合せフォームを作成しました。
「入力画面→完了画面」 方式です。
多重送信防止ですが、処理にメール送信があると効きません。
PHP
1$request->session()->regenerateToken();
POSTされた際のアクション
PHP
1public function send(Request $request) 2{ 3 $data = $request->only('name', 'email', 'message'); 4 //DBに保存 5 Contact::create($data); 6 //メール送信 7 Mail::to($to)->send(new ContactMail($data)); //この行がなければ多重送信防げる 8 // 多重送信対策 9 $request->session()->regenerateToken(); 10 return redirect()->action('ContactController@thanks'); 11}
ルーティング
PHP
1Route::get('/contact', 'ContactController@form'); //入力画面表示 2Route::post('/contact', 'ContactController@send'); //送信処理 3Route::get('/thanks', 'ContactController@thanks'); //完了画面表示
formメソッドとthanksメソッドは画面を表示するだけです。
PHP
1public function form() 2{ 3 return view('form'); 4} 5 6public function thanks() 7{ 8 return view('thanks'); 9}
メール送信処理があると、なぜ多重送信されてしまうのでしょうか。
また、完了画面に直接リンクできる状態ですが、不自然でしょうか。
この場合、sendメソッドから完了画面にリダイレクトするときにセッションを付与して、thanksメソッドで確認する等の処理が最適ですか。
回答よろしくお願いします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/10 11:22
2019/03/10 11:27