Stappenplan
In router.php
$route->get('items-create', 'controllers/items-create.php'); $route->post('items-store', 'controllers/items-store.php');
In controller items.create.php
<?php /* Indien je selectboxen hebt moet je hier waarschijnlijk gegevens uit de database ophalen om mee te geven aan de view. bv: $db = new Database(); view('items-create',[ 'categories' => $db->query("SELECT * FROM categories")->fetchAll() ]); */ view('items-create');
In view items-create.view.php
Hier komt een formulier met die kan worden verstuurd naar de route '/items' d.m.v. method=post
Versie zonder validatie en opnieuw invullen van velden
<?php view("parts/header", ['title' => 'item toevoegen']); view("parts/navigatie-menu"); ?> <h1 class="text-3xl my-4">Item toevoegen</h1> <form action="/items-store" method="post"> <?= csrf(); ?> <label for="naam">Naam</label><br> <input type="text" name="naam" id="naam" placeholder="naam"><br> <label for="beschrijving">Beschrijving</label><br> <textarea name="beschrijving" id="beschrijving" cols="30" rows="3" placeholder="beschrijving"></textarea><br> <label for="prijs">Prijs</label><br> <input type="number" step="0.01" name="prijs" id="prijs" placeholder="prijs"><br> <input type="submit" value="Toevoegen" class="border b-gray-600 rounded py-1 px-2 hover:bg-gray-100 cursor-pointer"> </form> <?php view("parts/footer");
Versie met validatie errors en opnieuw invullen van velden
<?php view("parts/header", ['title' => 'item toevoegen']); view("parts/navigatie-menu"); ?> <h1 class="text-3xl my-4">Item toevoegen</h1> <form action="/items-store" method="post"> <?= csrf(); ?> <label for="naam">Naam</label><br> <input type="text" name="naam" id="naam" placeholder="naam" value="<?= old('naam') ?>"><br> <?php if (errors('naam')): ?> <p class="text-red-500 text-sm my-2"><?= errors('naam') ?></p> <?php endif; ?> <label for="beschrijving">Beschrijving</label><br> <textarea name="beschrijving" id="beschrijving" cols="30" rows="3" placeholder="beschrijving"><?= old('beschrijving') ?></textarea> <br> <?php if (errors('beschrijving')): ?> <p class="text-red-500 text-sm my-2"><?= errors('beschrijving') ?></p> <?php endif; ?> <label for="prijs">Prijs</label><br> <input type="number" step="0.01" name="prijs" id="prijs" placeholder="prijs" value="<?= old('prijs') ?>"> <br> <?php if (errors('prijs')): ?> <p class="text-red-500 text-sm my-2"><?= errors('prijs') ?></p> <?php endif; ?> <input type="submit" value="Toevoegen" class="border b-gray-600 rounded py-1 px-2 hover:bg-gray-100 cursor-pointer"> </form> <?php view("parts/footer");
In controller items-store.php
<?php //validatie van de gegevens $request->validate([ 'naam' => 'required|length:0,50', 'prijs' => 'required|numeric|between:0.01,1000000' ]); //voor alle validatie regels zie cheat-sheet //indien validatie oké dan gegevens opslaan in de database $db = new Database(); $db->query("INSERT INTO items (naam, beschrijving, prijs) VALUES (:naam, :beschrijving, :prijs)", [ 'naam' => $request->naam, 'beschrijving' => $request->beschrijving, 'prijs' => $request->prijs, ]); //id veld staat op auto increment dus hoeft niet meegegeven te worden flash("Item " . $request->naam . " is toegevoegd"); //terugsturen naar de index pagina redirect("/items"); // of terugsturen naar de detail pagina van het item redirect("/items-show/".$db->lastInsertId());