Skip to main content

Update

Inleiding

Voor de update functie gaan we een knopje maken in ons overzicht.


Index View

We beginnen met het aanpassen van de index view. Plaats deze code als extra kolom in de tabel en vergeet niet ook een extra <th></th> te plaatsen. Het aantal kolommen in de tabel moet in alle regels gelijk zijn!

<td><a href="/stocks/edit/id={{$stock->id}}" class="btn btn-primary">Edit</a></td>

Edit Route

We voegen een route toe in de web.php

Route::get('stocks/edit/{id}',   [App\Http\Controllers\StockController::class, 'edit']);

Zodra we op de knop edit drukken in het overzicht (in de index.blade.php view) dan wordt de edit() function in deStockController aangeroepen. Het $id wordt bovendien meegegeven.

Controller edit()

In de controller zetten we de volgende code in de edit() function.

public function edit($id)
{
    $stock = Stock::find($id);
    return view('stocks.edit',['stock'=>$stock]);  // -> resources/views/stocks/edit.blade.php
}

De edit() functie in de controller haalt het record met het id $is op en het record, $stock wordt aan de view edit.blade.php in de stocks folder meegegeven.

Edit View

We plaatsen de volgende code in de edit.blade.php file in de stocks view. Deze file moeten we aanmaken.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    <title>Stocks</title>
</head>
<body>
  <div class="container" style="margin:40px;">

    <h1 class="display-3">Stocks</h1>  

    <form method="post" action="/stocks/update/{{$stock->id}}">
        @csrf
        <div class="form-group">

            <label for="stock_name">Stock Name:*</label>
            <input type="text" class="form-control" name="stock_name" value="{{ $stock->stock_name }}" />
        </div>

        <div class="form-group">
            <label for="ticket">Stock Ticket:*</label>
            <input type="text" class="form-control" name="ticket" value="{{ $stock->ticket }}" />
        </div>

        <div class="form-group">
            <label for="value">Stock Value:</label>
            <input type="text" class="form-control" name="value" value="{{ $stock->value }}" />
        </div>
        <button type="submit" class="btn btn-primary">Update</button>
    </form>

  </div>

</body>
</html>

Test de code en als het goed is, verschijnt het edit form als er op de editknop wordt gedrukt.

Wanneer de data wordt aangepast in dit edit form dan wordt er een post gedaan /stocks/update/{{$stock-id}}. Ben je bijvoorbeeld record met id 1 aan het aanpassen dan wordt het formulier gepost naar /stocks/update/1.

Hiervoor moeten we nu een route aanmaken.

Update Route

We voegen de volgende route in web.php.

Route::post('stocks/update/{id}',   [App\Http\Controllers\StockController::class, 'update']);

Nu moeten we de update() functie in de StockController aanpassen zodat het aangepaste record naar de database wordt weggeschreven.

Controller update()

plaats de volgende code in de update() functie in de StockController.

public function update(Request $request, $id)
{
    // Validation for required fields (and using some regex to validate our numeric value)
    $request->validate([
        'stock_name'=>'required',
        'ticket'=>'required',
        'value'=>'required|max:10|regex:/^-?[0-9]+(?:\.[0-9]{1,2})?$/'
    ]); 
    $stock = Stock::find($id);
    // Getting values from the blade template form
    $stock->stock_name =  $request->get('stock_name');
    $stock->ticket = $request->get('ticket');
    $stock->value = $request->get('value');
    $stock->save();

    return redirect('/stocks')->with('success', 'Stock updated.'); // -> resources/views/stocks/index.blade.php
}