У вас должно быть два пути для обработки форм. Тот, который использует 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
определению, которое просто показывает формы, и браузер не предложит вам сообщение, которое необходимо повторно отправить.
Спасибо за ваш ответ! Во-первых, мы говорим о Laravel 4, но это, вероятно, не имеет значения. Проблема: если я получаю первый вид клинка через get и сразу подтверждаю форму в течение нескольких секунд, поэтому получаю сообщение об ошибке. – user2588688
Я не уверен, что я следую. Не имеет значения, отправляете ли вы форму 1 секунда или 1 минуту после ее отображения. Это может быть что-то конкретное для вашего кода, поэтому, пожалуйста, отредактируйте свой вопрос, чтобы включить код, относящийся к этой проблеме. – Bogdan
Я так не думаю. Может быть, это плагин или что-то вроде еще ... Я обновлю вопрос – user2588688