Laravel 1 | Basis | Nog in ontwikkeling
Laravel CRUD - Game Collection
Module Laravel 1: Bouw je eigen Game Collection app
๐ฏ Leerdoelen
- Je kunt een Laravel-project installeren en lokaal starten.
- Je begrijpt hoe Laravel werkt met MVC: Model, View, Controller en Routes.
- Je kunt een database koppelen aan Laravel met een migratie en model.
- Je kunt CRUD-functionaliteit bouwen: Create, Read, Update en Delete.
- Je kunt Blade templates gebruiken om herhaling in HTML te voorkomen.
- Je kunt Git en GitHub gebruiken om je code netjes bij te houden.
๐ Uitleg
In deze module bouw je stap voor stap een web-app waarmee je je game-collectie kunt beheren. De app heet Game Collection. Je kunt games toevoegen, bekijken, aanpassen en verwijderen.
Je gebruikt hiervoor Laravel, een PHP-framework. Een framework is een verzameling afspraken, mappen en hulpmiddelen waardoor je sneller en netter een webapplicatie kunt bouwen.
Daarnaast gebruik je Git en GitHub. Git houdt wijzigingen in je code bij. GitHub is de plek waar je je project online opslaat.
โ Wat moet je al kunnen?
- Basis HTML, CSS en PHP.
- Basiskennis van MVC, bijvoorbeeld uit eerdere Yii-lessen.
- Werken met VS Code.
- XAMPP starten en phpMyAdmin openen.
Les 1 - Laravel installeren
Module 1.1: Installatie, Composer en Git
๐ฏ Leerdoelen
- Je kunt uitleggen wat Composer doet.
- Je kunt Composer installeren en controleren.
- Je kunt een nieuw Laravel-project aanmaken.
- Je kunt de Laravel development server starten.
- Je kunt een Git repository initialiseren en publiceren naar GitHub.
๐ Uitleg
Je gaat een app bouwen waarmee je je game-collectie kunt bijhouden. Je kunt games toevoegen, bekijken, bewerken en verwijderen.
Laravel wordt geรฏnstalleerd via Composer. Composer is de package manager voor PHP. Een package manager downloadt automatisch alle bestanden (codebibliotheken) die jouw project nodig heeft.
Vergelijk het met een boodschappenlijst voor je project: Laravel zegt welke onderdelen nodig zijn, Composer haalt ze op en zet ze in de juiste map.
๐งฉ Startercode
Controleer eerst of Composer al is geรฏnstalleerd. Open de terminal in VS Code en typ:
composer --version
Zie je een versienummer? Dan is Composer geรฏnstalleerd. Krijg je een foutmelding zoals composer is not recognized? Installeer Composer dan eerst via de officiรซle downloadpagina.
Download Composer hier:
https://getcomposer.org/download/
Gebruik op Windows meestal de Composer-Setup.exe. Laat de installer PHP zoeken in je XAMPP-map. Dat is meestal:
C:\xampp\php\php.exe
Sluit na de installatie VS Code en open VS Code opnieuw. Controleer daarna opnieuw:
composer --version
๐ ๏ธ Opdracht - Nieuw Laravel-project maken
- Open VS Code.
- Open een terminal.
- Ga naar de map waarin je schoolprojecten staan.
- Maak een nieuw Laravel-project aan:
composer create-project laravel/laravel games
cd games
code .
Start daarna de development server:
php artisan serve
Open in je browser:
http://localhost:8000
Als alles goed staat, zie je de Laravel-welkomstpagina.
๐ Uitleg
php artisan serve start een kleine lokale server. Die server is alleen bedoeld om tijdens het ontwikkelen je Laravel-app te testen.
Je stopt de server met Ctrl + C in de terminal.
๐ ๏ธ Opdracht - Git opzetten
- Open in VS Code het tabblad Source Control.
- Klik op Initialize Repository.
- Stage alle bestanden met de plusknop bij Changes.
- Gebruik als commit message: Initieel Laravel project.
- Klik op Commit.
- Klik op Publish Branch.
- Kies Publish to GitHub Public Repository.
๐ก Let op: Laravel maakt automatisch een .gitignore bestand aan. Hierin staat welke bestanden Git niet moet uploaden, bijvoorbeeld tijdelijke bestanden of geheime instellingen zoals wachtwoorden etc.
๐ฆ Inleveren
- Screenshot van de Laravel-welkomstpagina met de URL zichtbaar.
- Screenshot van je GitHub repository.
- Een korte uitleg in eigen woorden: wat doet
.gitignore?
Les 2 - MVC in Laravel
Module 1.2: Model, View, Controller en Router
๐ฏ Leerdoelen
- Je kunt uitleggen wat MVC betekent.
- Je kunt benoemen waar Models, Views, Controllers en Routes staan in Laravel.
- Je begrijpt hoe een browserverzoek door Laravel heen loopt.
๐ Uitleg
Laravel werkt volgens het MVC-patroon. MVC staat voor Model, View, Controller. Laravel gebruikt daarnaast ook een Router.
- Model: praat met de database. Voorbeeld:
Game.php. - View: bepaalt wat de gebruiker ziet. Voorbeeld:
index.blade.php. Hierin staat ook de html / css, etc. - Controller: haalt data op en stuurt die naar een view. Voorbeeld:
GameController.php. - Router: koppelt een URL aan een controllerfunctie. Voorbeeld:
routes/web.php.
PLAATJE!!
ย
๐ Uitleg
Een voorbeeld: de gebruiker gaat naar /games. Laravel zoekt in routes/web.php welke controllerfunctie bij die URL hoort. De controller haalt via het model games op uit de database en stuurt die naar een Blade-view. De view maakt daar HTML van voor de browser.
๐งฉ Startercode
routes/web.php // routes
app/Http/Controllers // controllers
app/Models // models
resources/views // views
database/migrations // database-aanpassingen
.env // lokale instellingen
๐ ๏ธ Opdracht - MVC herkennen
- Open je Laravel-project in VS Code.
- Zoek de mappen
routes,app/Models,app/Http/Controllersenresources/views. - Maak in je eigen woorden een korte beschrijving van elk onderdeel.
๐ฆ Inleveren
- Screenshot van je projectstructuur in VS Code.
- Korte uitleg per onderdeel: Model, View, Controller en Router.
Les 3 - Database & migraties
Module 1.3: Database koppelen aan Laravel
๐ฏ Leerdoelen
- Je kunt een database maken in phpMyAdmin.
- Je kunt het
.envbestand instellen voor MySQL. - Je kunt een model met migratie maken.
- Je kunt een migratie uitvoeren.
- Je kunt uitleggen wat
$fillabledoet.
๐ Uitleg
Een database bewaart de gegevens van je app. In deze les maak je een database met de naam games. Laravel gebruikt een migratie om tabellen aan te maken.
Een migratie is een PHP-bestand waarin staat hoe een databasetabel eruit moet zien. Je kunt het zien als een bouwtekening voor je tabel.
๐ ๏ธ Opdracht - Database aanmaken
- Start XAMPP.
- Start Apache en MySQL.
- Open phpMyAdmin:
http://localhost/phpmyadmin
- Maak een nieuwe database met de naam games.
๐งฉ Startercode
Open het bestand .env en pas de database-instellingen aan:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=games
DB_USERNAME=root
DB_PASSWORD=
๐ก Let op: Bij een standaard XAMPP-installatie is de MySQL-gebruiker vaak root zonder wachtwoord.
โ ๏ธ Let op: Het .env bestand staat in .gitignore en wordt niet gecommit. Het kan wachtwoorden bevatten. Dus omdat het in het bestand .gitignore staat, wordt het niet op Github geplaatst.
๐ ๏ธ Opdracht - Model en migratie maken
Voer dit commando uit in de terminal:
php artisan make:model Game --migration
Dit maakt twee bestanden:
app/Models/Game.php- een migratiebestand in
database/migrations
๐งฉ Startercode
Open de migratie en pas de up() functie aan:
public function up()
{
Schema::create('games', function (Blueprint $table) {
$table->increments('id');
$table->string('game_name');
$table->string('platform');
$table->string('genre');
$table->decimal('rating', 3, 1);
$table->timestamps();
});
}
Voer daarna de migratie uit via je terminal. De tabel zoals die in het migratiebestand staat wordt aangemaakt in de database 'games'. De eerste keer dat je dit commando uitvoert, worden ook de standaard Laravel tabellen aangemaakt, zoals die van user.
php artisan migrate
Controleer in phpMyAdmin of de tabel games bestaat.
๐งฉ Startercode
Open app/Models/Game.php en zet dit erin:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Game extends Model
{
use HasFactory;
protected $fillable = [
'game_name',
'platform',
'genre',
'rating'
];
protected $table = 'games';
}
$fillable bepaalt welke velden veilig via een formulier ingevuld mogen worden. $table koppelt dit model aan de tabel games.
๐ ๏ธ Opdracht - Git commit
- Open Source Control in VS Code.
- Stage alle wijzigingen.
- Commit met de message: Database migratie en Game model.
- Klik op Sync Changes.
๐ฆ Inleveren
- Screenshot van phpMyAdmin met de structuur van de tabel games.
- Screenshot van je terminal na
php artisan migrate. - Screenshot van je GitHub repository na de commit.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<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">
<title>Game Collection</title>
</head>
<body>
<div class="container" style="margin:40px;">
<h1 class="display-4">๐ฎ Game Collection</h1>
<table class="table">
<thead class="thead-dark">
<tr>
<th>ID</th>
<th>Game</th>
<th>Platform</th>
<th>Rating</th>
</tr>
</thead>
<tbody>
@foreach($games as $game) // in deze loop worden alle rijen (records) gemaakt die in de database zijn gevonden.
<tr>
<td>{{ $game->id }}</td>
<td>{{ $game->game_name }}</td>
<td>{{ $game->platform }}</td>
<td>{{ $game->rating }}/10</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</body>
</html>
Les 4 - Read: games tonen
Module 1.4: Data uit de database tonen
๐ฏ Leerdoelen
- Je kunt een resource controller maken.
- Je kunt data ophalen met een model.
- Je kunt data doorgeven aan een Blade-view.
- Je kunt een route maken naar een controllerfunctie.
๐ Uitleg
Read betekent: gegevens bekijken. In deze les toon je alle games uit de database in een tabel.
๐ ๏ธ Opdracht - Controller aanmaken
php artisan make:controller GameController --resource
Open de controller (in de map \app\http\controllers) en voeg bovenaan toe:
use App\Models\Game;
Pas daarna de functie index() aan:
public function index()
{
$games = Game::all();
return view('games.index', compact('games'));
}
๐งฉ Startercode
Maak de map resources/views/games en daarin het bestand index.blade.php:
@foreach en @endforeach vormen een loop in Blade. {{ }} drukt een variabele af en beveiligt automatisch tegen ongewenste HTML.
๐งฉ Startercode
Voeg deze route toe in routes/web.php:
Route::get('games', [App\Http\Controllers\GameController::class, 'index']);
๐ ๏ธ Opdracht - Testdata toevoegen
Voer deze SQL uit in phpMyAdmin via het tabblad SQL:
INSERT INTO `games` (`id`, `game_name`, `platform`, `genre`, `rating`, `created_at`, `updated_at`) VALUES
(1, 'The Legend of Zelda: TotK', 'Switch', 'Adventure', 9.5, NULL, NULL),
(2, 'Elden Ring', 'PS5', 'RPG', 9.0, NULL, NULL),
(3, 'Minecraft', 'PC', 'Sandbox', 8.5, NULL, NULL),
(4, 'FIFA 25', 'PS5', 'Sports', 7.0, NULL, NULL),
(5, 'GTA V', 'PC', 'Action', 9.5, NULL, NULL);
Ga daarna naar:
http://localhost:8000/games
๐ ๏ธ Opdracht - Git commit
- Stage alle wijzigingen.
- Commit met de message: Read: controller, view en route.
- Klik op Sync Changes.
๐ ๏ธ Opdracht - Oeps!!ย We zijn 'genre' vergeten in de view.ย
- Voeg deze toe in het kopje van de tabel en als veld in de rij.
- Daarna nogmaals comitten met een relevante message en syncen naar Github.
๐ฆ Inleveren
- Screenshot van
localhost:8000/gamesmet de URL zichtbaar. - Screenshot van je controllerfunctie
index(). - Screenshot van je GitHub repository na de commit.
Les 5 - Create: game toevoegen
Module 1.5: Formulier maken en data opslaan
๐ฏ Leerdoelen
- Je kunt een formulier maken in Blade.
- Je kunt formulierdata opslaan in de database.
- Je kunt server-side validatie toepassen.
- Je begrijpt waarom
@csrfnodig is.
๐ Uitleg
Create betekent: nieuwe gegevens toevoegen. Je maakt een formulier waarmee de gebruiker een nieuwe game kan opslaan.
Een formulier verstuurt data met POST. Laravel gebruikt @csrf om te controleren of het formulier echt van jouw website komt.
@csrf voegt in Laravel een beveiligingstoken toe aan een formulier, zodat Laravel kan controleren dat het verzoek echt van jouw website komt en niet van een kwaadwillende externe site.
๐งฉ Startercode
Voeg deze routes toe aan routes/web.php:
Route::get('games/create', [App\Http\Controllers\GameController::class, 'create']);
Route::post('games/store', [App\Http\Controllers\GameController::class, 'store']);
Voeg deze functies toe aan GameController:
public function create()
{
return view('games.create');
}
public function store(Request $request)
{
$request->validate([
'game_name' => 'required',
'platform' => 'required',
'genre' => 'required',
'rating' => 'required|numeric|min:0|max:10'
]);
$game = new Game([
'game_name' => $request->get('game_name'),
'platform' => $request->get('platform'),
'genre' => $request->get('genre'),
'rating' => $request->get('rating')
]);
$game->save();
return redirect('/games')->with('success', 'Game added!');
}
Voeg bovenaan de controller toe als dat nog niet bestaat:
use Illuminate\Http\Request;
๐งฉ Startercode
Voeg in index.blade.php boven de tabel deze knop toe:
<a href="/games/create" class="btn btn-success mb-3">๐ฎ Add Game</a>
๐งฉ Startercode
Maak resources/views/games/create.blade.php:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<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">
<title>Add Game</title>
</head>
<body>
<div class="container" style="margin:40px;">
<h1 class="display-4">๐ฎ Add Game</h1>
<form method="post" action="/games/store">
@csrf
<div class="form-group">
<label>Game Name *</label>
<input type="text" class="form-control" name="game_name" />
</div>
<div class="form-group">
<label>Platform *</label>
<input type="text" class="form-control" name="platform" placeholder="PS5, Xbox, PC, Switch..." />
</div>
<div class="form-group">
<label>Genre *</label>
<input type="text" class="form-control" name="genre" placeholder="Action, RPG, Sports..." />
</div>
<div class="form-group">
<label>Rating (0-10)</label>
<input type="number" step="0.1" min="0" max="10" class="form-control" name="rating" />
</div>
<button type="submit" class="btn btn-success">Add Game</button>
</form>
</div>
</body>
</html>
๐ ๏ธ Opdracht - Game toevoegen
- Start de Laravel server.
- Open
http://localhost:8000/games/create. - Vul het formulier in.
- Klik op Add Game.
- Controleer of de nieuwe game in het overzicht staat.
๐ ๏ธ Opdracht - Git commit
- Stage alle wijzigingen.
- Commit met de message: Create: formulier en store.
- Klik op Sync Changes.
๐ฆ Inleveren
- Screenshot van
localhost:8000/games/createmet de URL zichtbaar. - Screenshot van het overzicht met de nieuw toegevoegde game.
- Screenshot van je controllerfunctie
store(). - Leg in eigen woorden uit waarom je om een game toe te voegen een route nodig hebt. Lever dit in via een PDF.
Les 6 - Update: game bewerken
Module 1.6: Bestaande data aanpassen
๐ฏ Leerdoelen
- Je kunt een edit-knop toevoegen aan een overzicht.
- Je kunt bestaande data ophalen met een id.
- Je kunt een formulier vullen met bestaande waarden.
- Je kunt gewijzigde data opslaan in de database.
๐ Uitleg
Update betekent: bestaande gegevens aanpassen. Je maakt een edit-formulier waarin de huidige gegevens van een game al ingevuld zijn.
๐งฉ Startercode
Voeg in de tabel van index.blade.php een kolom Edit toe:
<th>Edit</th>
Voeg in de loop deze knop toe:
<td>
<a href="/games/edit/{{ $game->id }}" class="btn btn-primary btn-sm">Edit</a>
</td>
๐งฉ Startercode
Voeg deze routes toe aan routes/web.php:
Route::get('games/edit/{id}', [App\Http\Controllers\GameController::class, 'edit']);
Route::post('games/update/{id}', [App\Http\Controllers\GameController::class, 'update']);
Voeg deze functies toe aan de controller:
public function edit($id)
{
$game = Game::find($id);
return view('games.edit', ['game' => $game]);
}
public function update(Request $request, $id)
{
$request->validate([
'game_name' => 'required',
'platform' => 'required',
'genre' => 'required',
'rating' => 'required|numeric|min:0|max:10'
]);
$game = Game::find($id);
$game->game_name = $request->get('game_name');
$game->platform = $request->get('platform');
$game->genre = $request->get('genre');
$game->rating = $request->get('rating');
$game->save();
return redirect('/games');
}
๐งฉ Startercode
Maak resources/views/games/edit.blade.php:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<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">
<title>Edit Game</title>
</head>
<body>
<div class="container" style="margin:40px;">
<h1 class="display-4">โ๏ธ Edit Game</h1>
<form method="post" action="/games/update/{{ $game->id }}">
@csrf
<div class="form-group">
<label>Game Name *</label>
<input type="text" class="form-control" name="game_name" value="{{ $game->game_name }}" />
</div>
<div class="form-group">
<label>Platform *</label>
<input type="text" class="form-control" name="platform" value="{{ $game->platform }}" />
</div>
<div class="form-group">
<label>Genre *</label>
<input type="text" class="form-control" name="genre" value="{{ $game->genre }}" />
</div>
<div class="form-group">
<label>Rating (0-10)</label>
<input type="number" step="0.1" min="0" max="10" class="form-control" name="rating" value="{{ $game->rating }}" />
</div>
<button type="submit" class="btn btn-primary">Update</button>
</form>
</div>
</body>
</html>
Het verschil met create: de velden zijn al ingevuld via value="{{ $game->... }}".
๐ ๏ธ Opdracht - Game bewerken
- Open het overzicht.
- Klik bij een game op Edit.
- Pas bijvoorbeeld de rating aan.
- Klik op Update.
- Controleer of de wijziging zichtbaar is in het overzicht.
๐ ๏ธ Opdracht - Git commit
- Stage alle wijzigingen.
- Commit met de message: Update: edit form en update functie.
- Klik op Sync Changes.
๐ฆ Inleveren
- Screenshot van
localhost:8000/games/edit/1met de URL zichtbaar. - Screenshot van het overzicht na het aanpassen van een game.
- Screenshot van je controllerfunctie
update(). - Leg in eigen woorden uit welke stappen Laravel neemt bij het bewerken van een game. Dus op volgorde. (url -> route -> etc. etc.) Lever dit in als pdf.
Les 7 - Delete: game verwijderen
Module 1.7: Data veilig verwijderen
๐ฏ Leerdoelen
- Je kunt een delete-knop toevoegen aan een overzicht.
- Je kunt een record verwijderen uit de database.
- Je begrijpt waarom verwijderen via een formulier veiliger is dan via een link.
๐ Uitleg
Delete betekent: gegevens verwijderen. Omdat verwijderen een gevaarlijke actie is, doe je dit niet via een gewone link. Een link gebruikt meestal GET. Verwijderen moet via POST met een @csrf token.
Daarom maken we een formulier met een knop. De gebruiker krijgt ook eerst een bevestigingsvraag.
๐งฉ Startercode
Voeg in de tabel van index.blade.php een kolom Delete toe:
<th>Delete</th>
Voeg in de loop deze delete-knop toe:
<td>
<form action="/games/destroy/{{ $game->id }}" method="post">
@csrf
<button onclick="return confirm('Weet je het zeker?')" class="btn btn-danger btn-sm" type="submit">Delete</button>
</form>
</td>
๐งฉ Startercode
Voeg deze route toe aan routes/web.php:
Route::post('games/destroy/{id}', [App\Http\Controllers\GameController::class, 'destroy']);
Voeg deze functie toe aan de controller:
public function destroy($id)
{
$game = Game::find($id);
$game->delete();
return redirect('/games');
}
๐ ๏ธ Opdracht - Game verwijderen
- Open het overzicht.
- Klik bij een game op Delete.
- Bevestig de vraag.
- Controleer of de game verdwenen is.
๐ ๏ธ Opdracht - Git commit
- Stage alle wijzigingen.
- Commit met de message: Delete functionaliteit.
- Klik op Sync Changes.
๐ฆ Inleveren
- Screenshot van het overzicht met Edit- en Delete-knoppen en de URL zichtbaar.
- Screenshot van het overzicht nadat je een game hebt verwijderd.
- Screenshot van je controllerfunctie
destroy().
Les 8 - Blade templates optimaliseren
Module 1.8: Herhaling verminderen met een base template
๐ฏ Leerdoelen
- Je kunt uitleggen waarom dubbele HTML-code onhandig is.
- Je kunt een base template maken met
@yield. - Je kunt views laten erven van een template met
@extends. - Je kunt een gemiddelde rating berekenen in een Blade-view.
๐ Uitleg
Je hebt nu meerdere views met dezelfde HTML-structuur. Als je bijvoorbeeld Bootstrap of een menu wilt aanpassen, moet dat in meerdere bestanden. Dat is foutgevoelig.
De oplossing is een base template. Daarin zet je de gedeelde HTML. De losse pagina's vullen alleen hun eigen titel en inhoud in.
๐งฉ Startercode
Maak resources/views/base.blade.php:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<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">
<title>Game Collection</title>
</head>
<body>
<div class="container" style="margin:40px;">
<h1 class="display-4">@yield('title')</h1>
@yield('content')
</div>
</body>
</html>
@yield('content') is een plekhouder. Child-views vullen die plekhouder later in.
๐งฉ Startercode
Pas index.blade.php aan:
@extends('base')
@section('title', '๐ฎ Game Collection')
@section('content')
<a href="/games/create" class="btn btn-success mb-3">Add Game</a>
<table class="table">
<!-- tabelinhoud blijft hetzelfde -->
</table>
@endsection
Pas create.blade.php en edit.blade.php op dezelfde manier aan:
index.blade.php: ๐ฎ Game Collectioncreate.blade.php: ๐ฎ Add Gameedit.blade.php: โ๏ธ Edit Game
๐งฉ Startercode
Voeg onderaan de tabel een gemiddelde rating toe. Zet vรณรณr de loop:
@php( $sum = 0 )
Zet in de loop:
@php( $sum += $game->rating )
Zet na de loop:
<tr>
<td colspan="4"><strong>Gemiddelde rating:</strong></td>
<td><strong>{{ count($games) > 0 ? number_format($sum / count($games), 1) : 0 }}/10</strong></td>
<td></td>
</tr>
๐ ๏ธ Opdracht - Views optimaliseren
- Maak
base.blade.php. - Pas
index.blade.phpaan met@extendsen@section. - Pas
create.blade.phpaan met@extendsen@section. - Pas
edit.blade.phpaan met@extendsen@section. - Voeg de gemiddelde rating toe aan de indexpagina.
๐ ๏ธ Opdracht - Git commit
- Stage alle wijzigingen.
- Commit met de message: Blade templates geoptimaliseerd.
- Klik op Sync Changes.
๐ฆ Inleveren
- Screenshot van de indexpagina met gemiddelde rating en URL zichtbaar.
- Screenshot van de createpagina.
- Screenshot van de editpagina.
- Het bestand
base.blade.php. - Het bestand
create.blade.phpin de@extends-versie. - Screenshot van je GitHub repository met je commits.
Les 9 - Mini Challenge
Module 1.9: Zelf een show-pagina maken
๐ฏ Leerdoelen
- Je kunt zelf een route maken naar een detailpagina.
- Je kunt zelf een controllerfunctie maken voor รฉรฉn game.
- Je kunt zelf een Blade-view maken om รฉรฉn game te tonen.
- Je kunt รฉรฉn record ophalen uit de database met een id.
- Je kunt een Show-knop toevoegen aan het index-overzicht.
๐ Uitleg
In deze mini challenge ga je zelf een show-pagina maken voor รฉรฉn game.
Tot nu toe kun je games toevoegen, bekijken in een overzicht, aanpassen en verwijderen. Nu ga je ervoor zorgen dat een gebruiker op een knop kan klikken om de details van รฉรฉn specifieke game te bekijken.
Je maakt deze opdracht zoveel mogelijk zelf. Gebruik de eerdere lessen als voorbeeld.
๐ ๏ธ Opdracht - Show Game maken
- Maak een nieuwe route voor het tonen van รฉรฉn game.
- Maak een nieuwe controllerfunctie genaamd
show(). - Haal in deze functie รฉรฉn game op met het juiste
id. - Stuur deze game door naar een nieuwe view.
- Maak een nieuwe Blade-view voor de detailpagina.
- Toon op de detailpagina minimaal de volgende gegevens:
- Game name
- Platform
- Genre
- Rating
- Voeg in het overzicht een knop Show toe naast Edit en Delete.
PLAATJE!!
๐ก Tips
- Kijk goed naar hoe de Edit-knop is gemaakt in
index.blade.php. - Kijk bij de routes hoe
games/edit/{id}werkt. - In de controller kun je spieken bij de functie
edit($id). - Voor het ophalen van รฉรฉn game kun je weer
Game::find($id)gebruiken. - De nieuwe view lijkt waarschijnlijk op
edit.blade.php, maar je gebruikt geen formulier. - Denk eraan dat je de juiste game moet meegeven aan de view.
- Gebruik de base template met
@extends('base')en@section.
๐ง Denk zelf na
Je krijgt deze keer geen volledige startercode. Probeer zelf te bedenken welke code waar moet komen.
Denk aan deze onderdelen:
- Welke route heb je nodig?
- Welke controllerfunctie hoort bij die route?
- Hoe haal je de juiste game op uit de database?
- Hoe stuur je de game door naar de view?
- Hoe noem je de nieuwe view?
- Hoe ziet de Show-knop in het overzicht eruit?
๐ ๏ธ Opdracht - Testen
- Start de Laravel server.
- Open het overzicht via
http://localhost:8000/games. - Klik bij een game op Show.
- Controleer of je op een detailpagina komt.
- Controleer of de juiste gegevens van die game zichtbaar zijn.
- Test dit bij minimaal twee verschillende games.
๐ ๏ธ Opdracht - Git commit
- Stage alle wijzigingen.
- Commit met de message: Mini Challenge: show game pagina.
- Klik op Sync Changes.
๐ฆ Inleveren
- Screenshot van het overzicht met de Show-knop zichtbaar.
- Screenshot van de detailpagina van รฉรฉn game met de URL zichtbaar.
- Screenshot van je route in
routes/web.php. - Screenshot van je controllerfunctie
show(). - Screenshot van je nieuwe Blade-view.
- Screenshot van je GitHub repository met de laatste commit.
- Korte uitleg in eigen woorden: welke stappen neemt Laravel vanaf het klikken op de Show-knop tot het tonen van de detailpagina?


