Как правильно переслать параметры из результата POST и избежать обновления (повторной отправки) с помощью Laravel 5? - PullRequest
0 голосов
/ 10 сентября 2018

Это основная проблема, когда вы отправляете и выполняете публикацию, вы обычно не хотите давать пользователю возможность повторять отправку, обновляя или просматривая историю браузера.

(Повторная отправка бэкэнда, контроль и проверка здесь не ставятся под сомнение. Конечно, они должны быть на месте для безопасности)

Мое решение состояло в том, чтобы в веб-маршрутах 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)

...