Skip to main content

04 Routing

In deze les leer je wat routing is en hoe je binnen Yii de routing kunt instellen.

Het begrip routing komt terug in alle of veel frameworks waarmee je web applicaties kan maken; Yii, Laravel, Flask, Django,...


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:

  image-1594292626981.png

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

Hoe kom je van de URL in je browser naar de file op jouw laptop?

  image-1613336806883.png


Met routing zorg je ervoor dat je ergens een vertaling wordt gemaakt tussen het URL en de file PHP die moet worden uitgevoerd.

Alles wat hierboven is beschreven is de standaard routing. Zo werkt het op jouw laptop als je plain PHP gebruikt (dat is PHP zonder framework).

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 een framework werkt het daarom anders.


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:

  1. het eerste deel van het path is de controller-naam, maar
    1. de controller-naam begint altijd met een hoofdletter, en;
    2. 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
  2. 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

In de laatste regel ontbreekt het tweede deel van het path. In dat geval wordt de actionIndex uitgevoerd.


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:

  image-1594296881002.png


(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.
* Code by Navneet Shiravadakar
*/
class ExampleController extends Controller { public function actionSay($message = 'empty') { echo "Hello $message"; exit; } }

Opdracht:

Vervang de naam Navneet Shiravadakar in het commentaar door jouw naam.

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.

Inleveren

  1. Het bestand: controllers/ExampleController.php
  2. Screendump van het volledig scherm met browser waarop Hello gevolgd door jouw naam op het scherm verschijnt.

--

Verdieping (manual routing)

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/embed/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
--