2016-04-13 5 views
1

Если я перезагрузите или загрузите представление или нажмите кнопку «Назад» в браузере, получив форму и сразу подтвердя форму, я получаю следующее сообщение об ошибке «Пожалуйста, подождите, пока вы заполните форму снова».laravel 4 form timeout after reloading page

Можно ли предотвратить это?

ответ

0

У вас должно быть два пути для обработки форм. Тот, который использует GET в качестве HTTP-глагола и отображает форму и одну, которая использует POST и обрабатывает форму. Я проиллюстрирую это, используя пример, который использует форму для обновления данных пользователя и двух простых определений маршрутов.

Вид формы, давайте назовем его user_details.blade.php и магазин в resources/view/forms, может выглядеть следующим образом:

<form action="update-user/{$user->id}" action="POST"> 
    <input type="text" name="name" value="{{ $user->name }}"> 
    <input type="text" name="phone" value="{{ $user->phone }}"> 
    <input type="text" name="email" value="{{ $user->email }}"> 

    <button type="submit">Save</button> 
</form> 

Теперь вы должны иметь два маршрута, определенные: один, который отображает форму и один, который обрабатывает форму. Замечания по коде объясняют логику:

// Accessing http://domain.com/update-user/1 from the browser 
// will show the user update form for the user with ID 1 
Route::get('update-user/{id}', function ($id) { 
    // Get the current user details so you can pass them to the view 
    $user = User::find($id); 

    return view('forms.my_form')->with(compact('user')); 
}); 

// Using the same path `update-user/1` but with POST for your 
// form action will match this `Route::post` definition so it 
// will process the submitted form 
Route::post('update-user/{id}', function(Request $request, $id) { 
    $user = User::find($id); 
    $user->fill($request->only('name', 'phone', 'email'); 
    $user->save(); 

    // After you've finished processing the form redirect to 
    // the `update-user/{id}` route path, but since it's 
    // using GET for the redirect it will match the route 
    // definition that shows the form 
    return redirect()->to('update-user/' . $id); 
}); 

Имея отдельный маршрут, который обрабатывает форму и перенаправляет обратно автоматически означает, что, когда ответный удар вы всегда будете возвращаться к Route::get определению, которое просто показывает формы, и браузер не предложит вам сообщение, которое необходимо повторно отправить.

+0

Спасибо за ваш ответ! Во-первых, мы говорим о Laravel 4, но это, вероятно, не имеет значения. Проблема: если я получаю первый вид клинка через get и сразу подтверждаю форму в течение нескольких секунд, поэтому получаю сообщение об ошибке. – user2588688

+0

Я не уверен, что я следую. Не имеет значения, отправляете ли вы форму 1 секунда или 1 минуту после ее отображения. Это может быть что-то конкретное для вашего кода, поэтому, пожалуйста, отредактируйте свой вопрос, чтобы включить код, относящийся к этой проблеме. – Bogdan

+0

Я так не думаю. Может быть, это плагин или что-то вроде еще ... Я обновлю вопрос – user2588688