Это основная проблема, когда вы отправляете и выполняете публикацию, вы обычно не хотите давать пользователю возможность повторять отправку, обновляя или просматривая историю браузера.
(Повторная отправка бэкэнда, контроль и проверка здесь не ставятся под сомнение. Конечно, они должны быть на месте для безопасности)
Мое решение состояло в том, чтобы в веб-маршрутах Laravel определяли пост и маршрут получения.
Как:
Route::post('/action', 'ActionController@doAction')->name('do.action');
Route::get('/action', 'ActionController@doActionConfirm')->name('do.action.confirm');
В ActionController что-то вроде:
public function doAction(Request $request)
{
....
return redirect()->route('do.action.confirm', [ 'data' =>
base64_encode(json_encode([
'action_id'=> $action_id,
'sent_to'=> $email,
'sent_success'=> $sent_success,
'sent_errors'=> $sent_errors,
]))]);
}
....
public function doActionConfirm(Request $request)
{
return view('confirmation')->with('data',$request->input('data'));
}
Затем в моем подтвержении .blade.php получите эти данные, декодированные и отображенные.
Это правильный способ сделать это с Laravel?
Что мне здесь не нравится:
есть ли лучший и более элегантный способ пересылки данных из redirect ()
Есть ли лучший способ управления параметрами получения для маршрута GET, чтобы люди не понимали и не пытались внедрить нежелательные данные в блэйд подтверждения? (даже если они не получат ничего, кроме бессмысленных представлений ... потому что страница ничего не делает, она просто отображает данные в блейде HTML)