Wijzigen doorvoeren
We hebben eerder al code gebouwd om een product zelf toe te kunnen voegen, dat is een CREATE actie. We kunnen ook al verwijderen (DELETEE), dus we willen natuurlijk ook kunnen wijzigen.
Wijzigen moeten we ook per product kunnen doen. Net als bij verwijderen moeten we dan ook een wijzig knop per regel opnemen.
Hier maken we echter geen formulier, maar gebruiken een meer normale <a href> button.
<td><a href="products/edit/{{ $product['id']}}">Wijzigen</a></td>
Route
Net als we bij verwijderen hebben gezien, zal de route hier weer worden aangeroepen met een waarde. Hier is het een GET actie.
/products/edit/5
De waarde voor id geven we in de route aan met {id}. We starten hier de edit methode in de ProductController.
Route::get('/products/edit/{id}', [ProductController::class, 'edit']);
Controller
Deze route zal in de controller de edit() method aanroepen. Daar gaan we een product laden met de opgegeven naam.
Dan roepen we het product/form aan met weer het $product object. Als je gaat terugkijken is dat eigenlijk hetzelfde als we bij de create() method deden.
In het formulier willen we onderscheid kunnen maken tussen een CREATE en een UPDATE actie. Dat gaan we doen met de waarde in het $product->id
Voor create willen we dat de id 0 (nul) is. En voor de update gevuld met de id van de gekozen rij.
Hiervoor moeten we in de create() method aanpassen.
public function create()
{
    $product = new Product();
    
$product->id = 0;
        
    return view('product.form', compact('product'));
}
In de edit() method gebruiken we het meegegeven id om te zoeken, die komt dan vanzelf in de product->id te staan.
public function edit($id)
{
    $product = Product::findOrFail($id);
    return view('product.form', compact('product'));
}
En nogmaals we roepen hetzelfde formulier aan als bij de CREATE actie.
Form
Als je in het formulier wilt kun je nu een regel opnemen om aan de gebruiker aan te geven welke actie bezig is. In product/form.blade.php.
if ($product->id == 0)
    <h1>Product toevoegen</h1>
else
    <h1>Product wijzigen</h1>
endif
Een andere wijziging die we zeker moeten doen is het binnenkomende id doorgeven. Dat doen we door een hidden veld op te nemen. Dit is onzichtbaar voor de gebruiker (tenzij die in de inspect modus van de browser gaat zoeken, en dan zegt het nog weinig).
<input type="hidden" name="id" value="{{$product->id}}">
De waarde komt op deze manier niet op het scherm, maar zal wel naar de store worden verzonden.
Tip: Wil je bij het werken van het id veld de waarde controleren. Dan kun je het type tijdelijk veranderen naar text. Het veld komt dan gewoon op het scherm te staan.
Voor het opslaan van gegevens blijven we gewoon de store method in de controller gebruiken. Er is geen reden om van methode te wisselen. De methode moet wel worden aangepast.