Controllers
Inleiding
Je hebt een nieuwe View en Route gemaakt.
De view laat statische data zien (= niet uit de database). Als we data uit de database willen tonen (=dynamische data) dan hebben we net als in Yii de controller nodig.
Dit is een lang verhaal waarin MVC en het nut van een controller wordt uitgelegd. We hebben dit ook gehad bij Yii, maar het is belangrijk dat je precies weet wat een controller en een view doet. Lees dit stuk dus goed door.
Wat is een Controller?
Een Controller zorgt ervoor dat de View requests kan ontvangen en/of versturen naar de database. Deze structuur noemen we ook wel een ModelViewController (MVC).
Wat is een MVC?
De MVC is een basis software architectuur waardoor je makkelijk en overzichtelijk projecten kunt bouwen. Het MVC model maakt elke code los om een specifieke taak uit te voeren. Daardoor is bekend wat elk onderdeel doet en bij bugs is het makkelijk te zien waar het probleem zit.
De MVC architectuur wordt ook gebruikt in andere frameworks.
Wat doet een MVC?
De acties bij een MVC kun je vergelijken met een restaurant.
Scenario: Het restaurant (MVC): Het restaurant is de MVC architectuur. Zij zorgen er allemaal voor dat het restaurant (in webdevelopment, de site) soepeltjes verloopt en dat alle bestellingen worden uitgevoerd. |
De klant (View)De klant is de View. Zij zijn technisch gezien de front-end en zijn verantwoordelijk wat jij op jouw browser te zien krijgt. Dit zijn de klanten van het restaurant. Zij willen graag
Onthouden! Alle Views staan in het mapje |
De ober (Controller)De ober is de Controller. Zij zijn verantwoordelijk voor het communiceren tussen de View (klant) en Model (keuken). Je kan ze zien als de tussenpersoon. Dit is de ober. De ober heeft de bestelling ( Hieronder zie je hoe een Controller te werk gaat in Laravel:
|
De keuken (Model)De keuken is de Model. Zij zijn verantwoordelijk dat ze de taken van de controller uitvoeren en dit te communiceren met de database. Dit is de keuken. Ze hebben een taak van de ober ontvangen om de gerechten te maken en te geven aan de ober.. |
Hoe maak je een Controller?
Nu je weet wat een controller doet, gaan we er eentje maken. Dat gaat heel simpel!
Een controller maken kan je makkelijk met een commando via de terminal maken:
php artisan make:controller JouwvoornaamController
Let op dat Jouwvoornaam met ene hoofdletter begint!
Voer het commando uit. Jouw Controller is nu aangemaakt! Je kan jouw gemaakte Controller terugzien in de map app/Http/Controllers
met de naam JouwvoornaamController.php
Als je de file opent, zie je deze code:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class JouwvoornaamController extends Controller
{
// Hier maak je jouw functions.
}
Dit is jouw Controller. Alleen is het leeg. In de class maak je alle logica en CRUD's aan.
Jouw View tonen vanuit de Controller
We gaan nu code maken die de view die we eerder hebben gemaakt aanroept vanuit de controller.
Om dat te kunnen doen moet je eerst een public function functieNaam(){}
in de class
maken. Daarin plaats je return view('viewNaam');
in de codeblok van public function functieNaam(){}
. Hieronder een voorbeeld:
public function functieNaam(){
return view('viewNaam');
}
Gefeliciteerd! Je hebt nu een Controller gemaakt die een view laat zien! Alleen laat hij dat niet zien, omdat hij niet weet naar welk URL hij moet gaan...
Daarom moet je hem nog via de Routes naar de Controller verwijzen.
Jouw Controller verwijzen in de Routes
Om jouw Controller te verwijzen in de Routes moet je routes/web.php
aanpassen.
Je maakt een route naar de controller op de volgende manier:
// plaats dit bovenaan in de routing file (web.php)
use App\Http\Controllers\UrlController;
// Plaats vervolgens je routing informatie
Route::get('/url', [UrlController::class, 'functionName']);
/url: dit is de URL die je koppelt aan de controller.
UrlController: de naam van de Controller
functionName: de naam van de van de functie die Controller zit
Een voorbeeld van de Routes bij het restaurant scenario (op basis van de code bij "De ober (Controller)":
Route::get('/dishes', '[OberController::class, 'getDishes');
Dit zorgt ervoor dat de URL /dishes wordt gekoppeld aan de functie getDishes die staat in het bestand App\Http\Controllers\OberController
Opdracht - Controller maken en linken aan de Route
- Maak een controller aan via de terminal en geef de ControllerNaam
homeController
- Ga naar de controller en maak in de
class
eenpublic function
aan dieindex()
heet.
Toon jouw eerder gemaakte View in de Controller. - Ga naar jouw
web.php
en zoek naar deRoute::get
die de URL/
heeft
Vervang de verwijzing i.p.v. naar de view nu naar dehomecontroller
. Ook moet hij verwijzen naar deindex
functie.
De output is hetzelfde als in de vorige opdracht, maar dit keer ga je via de controller naar de view.
Inleveren
- Een screenshot van de terminal die aantoont dat je een Controller hebt gemaakt
- Een screenshot van de code van je Controller
- Een screenshot van de code van je Routes