2, Routing
In deze les leer je wat routing is en hoe je binnen Yii de routing kunt instellen.
Wat is routing? (Algemeen)
Routing is de manier waarop de webserver en jouw programma weet welke pagina er moet worden getoond. Kijk maar eens goed naar de URL in je browser. Je kunt de URL opdelen in 5 stukjes:
Onderdeel | Wat is het? | Uitleg |
Scheme | protocol | hoe wordt de informatie verzonden (http, https, ftp, smb, file, ...) |
domain name | domein | domein verwijst naar een server of een groep servers. |
file path | path | verijst naar de file die de webserver moet 'uitvoeren' |
parameters | variabelen | hiermee kun je informatie naar de webserver sturen. |
anchor | verwijzing binnen de pagina | hiermee kun je naar een onderdeel van de pagina springen. Voorbeeld: https://www.roc.ovh/link/302#bkmrk-nog-een-keer-in-sche |
Het schema bepaald hoe de informatie wordt opgevraagd (bij een webserver is dit meestal http en https). De domain name is de naam van de server(s). Het file path verteld de server welke informatie er moet worden getoond. De parameters zijn variabele die mee kunnen worden gegeven bijvoorbeeld om waarden die een gebruiker heeft ingevoerd naar de webserver te sturen. Tot slotte is het anchor (weinig gebruikt) een verwijzing naar een stukje binnen een pagina.
Normaal gesproken komt het file path overeen met de locatie van de bestanden op de server. Het file path is het path vanaf de document root. Stel de document root staat op jouw laptop naar:
c:\www
Je hebt XAMPP opgestart en je gaat naar:
http://localhost/opgave1/uitslag/index.php
Dan wordt de file
c:\www\opgave1\uitslag\index.php
door de webserver uitgevoerd. Het file path wordt dus achter de document root geplaatst
Routing zorgt ervoor dat het path en eventueel de parameters de juiste code uitvoeren. Bij eenvoudige web applicaties is het path gewoon de locatie van de file op de harddisk, maar voor meer ingewikkelde programma's kan dat al snel onoverzichtelijk worden.
Met routing zorg je ervoor dat je ergens een vertaling wordt gemaakt tussen het path en de functie die moet worden uitgevoerd.
Routing in Yii
Standaard hoef je niets te doen voor routing. Er zit al heel veel voorgebakken in Yii.
Stel je typt in je browser in
localhost:8080/country/index
Dit path bestaat uit twee delen; country en index.
country verwijst naar controllers/CountryController en
index verwijst naar de public function actionIndex in de class CountryController.
Het path bestaat in Yii uit twee delen, de verwijzing naar de controller en de verwijzing naar de functie/method.
De vertaling van path naar controller en function/method gaat als volgt:
- het eerste deel van het path is de controller-naam, maar
- de controller-naam begint altijd met een hoofdletter, en;
- als er een streepje (-) in het path staat dan is dat een nieuw woord en in de controller begint dit nieuwe woord met een hoofdletter. Voorbeeld: dit-is-het-eerste-deel wordt DitIsHetEersteDeel
- Het tweede deel van het path wordt opdezelfde manier vertaald maar er wordt ook nog eens het woord action voorgezet. Voorbeeld: dit-is-het-tweede-deel wordt actionDitIsHetTweedeDeel
Een paar voorbeelden:
path | file | public function |
/kaart/overzicht | KaartController | actionOverzicht |
/klas-lokaal/overzicht | klasLokaalController | actionOverzicht |
/klas-lokaal/stoel-maat | klasLokaalController | actionStoelMaat |
/klas-lokaal/index | klasLokaalController | actionIndex |
/klas-lokaal | klasLokaalController | actionIndex |
Zoals is te zien in de laatste regel, wordt de actionIndex uitgevoerd als het tweede deel van het path ontbreekt.
Nog een keer in schema
Oefening
We gaan in onze World-applicatie oefenen met routing
(1) Zet in de CountryController in de CountryController class een nieuwe public function:
public function actionHello() {
echo "Hello World!";
exit;
}
Opdracht: Save de aangepaste CountryController en bedenk met welke url je nu deze nieuwe functie (method) moet aanroepen.
Controleer dat, zodat je in jouw browser het volgende ziet:
(2) Maak een nieuwe file controllers/ExampleController.php en zet daar het volgende in.
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
/**
* CountryController implements the CRUD actions for country model.
*/
class ExampleController extends Controller
{
public function actionSay($message = 'empty')
{
echo "Hello $message";
exit;
}
}
Opdracht: Ga nu naar http://localhost:8080/..............?message=friend maar vervang de puntjes zodat je de functie (method) actionSay van de ExampleController uit laat voeren.
Opdracht: Pas de parameter in de url aan zodat er op het scherm komt "Hello" gevolgd door jouw voornaam. Gebruik voor jouw naam één woord.
Extra
In de vorige les hebben een instelling in de config/web.php aangepast. Hierdoor hebben we eenvoudige routing aan gezet. Als je dit uit zet dan werkt de routing iets anders. Voor nu niet belangrijk maar als je wilt weten hoe het precies zit, kijk dan naar dit Engelse Youtube filmpje: https://www.youtube.com/watch?v=QcZiS43iVxU
Verder is er nog meer informatie te vinden op de officiële Yii documentatie pagina's: https://www.yiiframework.com/doc/guide/2.0/en/runtime-routing
--