# Create
### Inleiding
We hebben nu een werkende read; we kunne de inhoud van een tabel op het scherm tonen.
We het model uitbreiden, routes maken en een view maken zodat we een record aan de tabel in de database kunnen toevoegen.
### Create Route
We beginnen met een nieuwe route.
```PHP
Route::get('stocks/create', [App\Http\Controllers\StockController::class, 'create']);
```
### Controller
Vervolgens maken we een functie create in de StockController file.
```PHP
public function create()
{
return view('stocks.create'); // -> resources/views/stocks/create.blade.php
}
```
### View
We maken even een tijdelijke view.Maak een nieuwe file resources/views/stock/create.blade.php en plaats er even tijdelijk code in, bijvoorbeeld.
```HTML
Topper!
```
In de andere view die we al hadden, de file resources/views/stock/index.blade.php plaatsen we de volgende code vlak boven de <tabel>
```HTML
```
### Testen
Op de stocks pagina (localhost:8000/stocks) staat nu een Create button.
Wat doet deze button?
De button gaat naar /stocks/create.
De route *stocks/create* verwijst naar de *create()* functie in de *StockController* en die verwijst naar de view *resources/views/stock/create.blade.php*
Dus in het kort:
De routing werkt nu, maar er wordt nog geen nieuwe record aangemaakt.
We gaan nu eerst de create view aanpassen zodat er een form wordt getoond waarin we een nieuw record kunnen aanmaken.
### Input form
Plaats in de create.blade.php view file nu de volgende code.
```HTML
Stocks
Stocks
```
### Store Route
Het form doet een post naar /stocks/store. We gaan hiervoor een route toevoegen (in de web.php).
```PHP
Route::get('stocks/store', [App\Http\Controllers\StockController::class, 'store']);
```
### Store functie Controller
De store functie in de controller ziet er als volgt uit.
```PHP
public function store(Request $request)
{
// 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})?$/'
]);
// Getting values from the blade template form
$stock = new Stock([
'stock_name' => $request->get('stock_name'),
'ticket' => $request->get('ticket'),
'value' => $request->get('value')
]);
$stock->save();
return redirect('/stocks')->with('success', 'Stock saved.'); // -> resources/views/stocks/index.blade.php
}
```
##### Validatie
In regel 4 tot en met 8 worden de velden gevalideerd. Omdat dit in de controller op de server gebeurt is dit een server-side validatie. Je kunt ook via HTML valideren, dat heet cliƫnt-side validatie en is minder veilig.
##### Nieuw record
Regel 10 tot en met 14 maakt een nieuw record aan en vult dat met de gevalideerde waarden uit het form.
Regel 15 slaat de record op in de database.
Regel 16 gaat terug naar de /stocks url. Via de route wordt hierdoor de index() functie aangeroepen en worden alle regels getoond.
Het tweede gedeelte van de de regel zorgt ervoor dat er een boodschap op het scherm verschijnt.
\--