Laravel Formular
Standardmäßig werden für das Erstellen und für das Bearbeiten eines Eintrages unterschiedliche Views und somit verschiedene HTML-Formulare verwendet. Im Controller kann anhand der Methode unterschieden werden, ob es sich um einen neuen Eintrag (Insert) oder um das Bearbeiten eines bestehenden Eintrages handelt (update).
Die Methode POST wird für neue Einträge verwendet, PUT/PATCH für Updates. Damit für Updates und Inserts dasselbe Formular verwendet werden kann, müssen wir im Controller unterscheiden ob es sich um einen neuen Eintrag oder um einen bestehenden handelt.
Ziel
Create
URL: item/create
lädt ein leeres Formular:
Überprüfung:
Eingabe einer Zahl:
..Redirect auf /item
Antwort:
"would create item property:456"
Edit
Aufruf: item/4/edit
lädt bereits gespeicherte Werte für ID: 4
beim Speichern wird die Eingabe im Controller überprüfen:
Ist die Validierung erfolgreich, findet ein Redirect auf /item statt:
Antwort:
"edit item ID:4 property:99"
Vorbereitung: Controller, Routes
Ich erstelle einen neuen Controller:
php artisan make:controller ItemController
Routes-File
Route::resource('item', 'ItemController');
View
Hier die View für das Edit / Create-Formular:
File: /resources/views/edit.blade.php
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ url('item') }}" method="POST" class="form-horizontal">
{{ csrf_field() }}
<input type="hidden" name="id" class="form-control" value="{{$saveditem->id ?? ''}}">
<input type="text" name="property" class="form-control" value="{{ old('property',$saveditem->property ?? null) }}">
<button type="submit" class="btn btn-default">
<i class="fa fa-btn fa-plus"></i>Speichern
</button>
</form>
Controller
Die Store-Funktion im Controller muss jetzt noch zwischen Update und Create entscheiden: Wird eine ID mitgegeben: Update, ansonsten: Create.
File:/app/Http/Controllers/ItemController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ItemController extends Controller
{
public function create()
{
return View('edit');
}
public function edit($id)
{
$saveditem=(object) array(
'id' => $id,
'property' => 'Property for a saved id'
);
/* DB Usage:
$saveditem=Item::where('id',$id)->first();
*/
return View('edit',compact('saveditem'));
}
public function store(Request $request)
{
//dd($request);
$this->validate($request, [
'property' => 'required|numeric']);
if ($request->id > 0) { //edit
/*
Missing: Test if the user is allowed to edit this Value
*/
dd("edit item ID:". $request->id. " property:". $request->property);
} else { //create
dd("would create item property:". $request->property);
/* DB Usage:
$item = Item::create([
'item' => $request->property
]);
*/
}
return redirect('home');
}
}
{{percentage}} % positiv
DANKE für deine Bewertung!
Fragen / Kommentare
(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]