Sie sollten zwei Routen haben, um Formulare zu bearbeiten. Eine, die GET
als das HTTP-Verb verwendet und das Formular anzeigt und eines, das POST
verwendet und das Formular verarbeitet. Ich werde das anhand eines Beispiels veranschaulichen, das ein Formular verwendet, um die Details eines Benutzers und zwei einfache Routendefinitionen zu aktualisieren.
Die Formularansicht, machen wir es in resources/view/forms
user_details.blade.php
und Laden nennen, wie folgt aussehen:
<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>
Jetzt sollten Sie zwei Routen definiert haben: eine, die die Form und eine Anzeige, die das Formular verarbeitet. Die Kommentare auf den Code unten erklären die Logik:
// 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);
});
eine separate Strecke zu haben, das das Formular verarbeitet und leitet wieder automatisch bedeutet, dass, wenn die Kollision wieder werden Sie immer wieder auf die Route::get
Definition gehen werden, die nur die zeigt, Formular, und der Browser wird Sie nicht mit der Nachricht auffordern, dass Sie das Formular erneut einreichen müssen.
Danke für Ihre Antwort! Zuerst sprechen wir über Laravel 4, aber das spielt wahrscheinlich keine Rolle. Das Problem ist: wenn ich über get die erste Ansicht eines Blade bekomme und ich das Formular innerhalb weniger Sekunden sofort bestätige, bekomme ich die Fehlermeldung. – user2588688
Ich bin mir nicht sicher, ob ich folge. Es spielt keine Rolle, ob Sie das Formular 1 Sekunde oder 1 Minute nach der Anzeige absenden. Es könnte sich um etwas handeln, das für Ihren Code spezifisch ist. Bearbeiten Sie daher Ihre Frage so, dass sie den für das Problem relevanten Code enthält. – Bogdan
Das glaube ich nicht. Vielleicht ist es ein Plugin oder etwas ähnliches ... Ich werde die Frage aktualisieren – user2588688