De vorige keer hebben wij Laravel geinstalleerd en van deze installatie een project aangemaakt in PHPStorm.
Vandaag gaan we de structuur van Laravel bekijken, met daarbij een korte uitleg over wat alles precies doet en hoe dit zich verhoudt tot de applicatie zelf.
Vooraf in te stellen
Voordat we beginnen is het belangrijk om Laravel te vertellen waar onze applicatie draait, open daarom even NaamvanJouwSite/app/config/app.php en zoek daar naar 'url' => '' ,
en zorg er voor dat dit er zo uit ziet: 'url' => 'http://localhost/NaamVanJouwSite/public/',
Het beheren van de routes binnen je applicatie
Zoals je kunt zien op http://localhost/NaamVanJouwSite/public/ wordt er standaard een pagina geserveerd van Laravel.
Maar deze pagina wil je natuurlijk wijzigen, maar kan je dat doen?
Daarom beginnen we met het routeringssysteem van Laravel, dit klinkt ingewikkelder dan het is.
Open in PHPStorm het bestand NaamVanJouwSite/app/routes.php je treft hier de volgende code aan:
Wat hier eigenlijk staat is dat wanneer een gebruiker binnen komt op de URL "/" (je root/index) laat de gebruiker dan het View bestand "hello" zien
In dit script leg je dus alle legale routes binnen jouw applicatie vast, maak om te proberen maar eens de volgende route aan:
Wanneer je nu in de browser naar http://localhost/NaamVanJouwSite/public/hallo/daar gaat zul je zien dat dezelfde pagina wordt getoond als op de index.
Wanneer je echter naar http://localhost/NaamVanJouwSite/public/bestaatniet gaat zul je een grote oranje pagina zien met de melding "Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException" wat dus betekent dat de aangevraagde route niet bestaat in je routes bestand.
Nu is het stoppen van logica in je routes bestand niet echt netjes, en willen we ook geen waslijst van honderden routes handmatig gaan aanmaken dus we gaan er eerst voor zorgen dat alles netjes via een controller verloopt.
We zetten eerst de volgende regel onderaan in het routes bestand:
Wat we hier doen is alle routes die beginnen met /users door verwijzen naar een controller die UserController heet.
Echter bestaat deze nog niet, dus deze zullen we eerst moeten aanmaken.
Het afhandelen van route verzoeken
Open de folder NaamVanJouwSite/app/controllers en maak hier een bestand aan met de naam UserController.php hierin zetten we de volgende code:
We hebben nu dus de controller aangemaakt, die de aanvragen die op http://localhost/NaamVanJouwSite/public/users/ binnen komen gaat afvangen.
Maar hé, waarom krijg ik dan toch nog een foutmelding wanneer ik in de browser naar deze URL ga?
Dat komt omdat we binnen de class nog geen functies hebben aangemaakt, we beginnen met een index functie.
Pas de controller die we net hebben aangemaakt zodat deze er zo uit ziet:
De naam getIndex heb ik niet zomaar gekozen, het woord get geeft aan dat deze functie moet reageren op een aanvraag verzoek en het woord Index geeft aan dat het gaat om de Index pagina.
Je kan deze regel dus eigenlijk lezen als "Verzoekt de gebruiker de index functie? Zo ja, reageer er dan op".
Wanneer we nu de pagina vernieuwen zullen we wederom het welkom scherm van Laravel te zien krijgen.
De getIndex functie is wel bijzonder want deze reageert op zowel http://localhost/NaamVanJouwSite/public/users/ als http://localhost/NaamVanJouwSite/public/users/index
Dit betekent dus ook dat je een nieuw verzoek kunt aanmaken door een nieuwe functie te maken binnen de class.
En naast get is het ook mogelijk om je functie te starten met post, dit zorgt er voor dat de desbetreffende functie zal reageren op post verzoeken.
Voeg in de UserController de volgende functies toe:
En open de desbetreffende URLS eens in de browser, dit zijn:
http://localhost/NaamVanJouwSite/public/index.php/users/telefoon
localhost/NaamVanJouwSite/public/index.php/users/hallo
localhost/NaamVanJouwSite/publ…hp/users/tweehoofdletters
Je zult nu waarschijnlijk raar opkijken dat álleen de eerste URL werkt, hoe kan dit?!
Dat is nu hoe Laravel reageert op de naam van je functie, we zullen postHallo en getTweeHoofdletters even bespreken.
postHallo
Bij het aanvragen van deze pagina krijg je een foutmelding omdat deze enkel en alleen reageert op POST verzoeken. Alle GET verzoeken worden dus per definitie niet erkend.
Wil je toch http://localhost/NaamVanJouwSite/public/index.php/users/hallo openen?
Dan zul je een functie moeten aanmaken die getHallo heet, probeer het maar eens.
getTweeHoofdletters
Oké DirkZz, heel leuk en logisch alleen maal met die postHallo, maar deze functie staat gewoon aangegeven als GET. Waar werkt deze dan niet?
Deze aanvraag werkt niet omdat Laravel bij meerdere hoofdletters in de naam ervan uit gaat dat hij er dashes (het - teken) tussen moet zetten.
Wil je deze pagina bezoeken dan zul je dus naar http://localhost/NaamVanJouwSite/public/index.php/users/twee-hoofdletters moeten gaan. En je zult zien dat de pagina dan wel werkt.
Meer weten?
Bekijk de documentatie van laravel als je hier meer over wilt weten, we hebben zojuist de basis besproken maar er is veel meer mogelijk.
Meer weten over Controllers : laravel.com/docs/controllers#restful-controllers
Meer weten over Routes: laravel.com/docs/routing
Dingen om te onthouden
Krijg je de melding "Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException" dan heb je geen route naar jouw pagina gemaakt in het bestand routes.php
Word je doorgestuurd naar http://localhost/public wanneer je een pagina opent? Dan heb je de URL niet ingesteld in NaamvanJouwSite/app/config/app.php achter url => '',
De volgende keer
De code tot nu toe is te vinden op Github
Nu de basis staat gaan we in de volgende tutorial die welkom pagina van Laravel vervangen door een eigen pagina, en de eerste hand leggen aan een login systeem.
Vragen/opmerkingen?
Stel ze hier onder of stuur me een DM, ik help je graag verder
Vandaag gaan we de structuur van Laravel bekijken, met daarbij een korte uitleg over wat alles precies doet en hoe dit zich verhoudt tot de applicatie zelf.
Vooraf in te stellen
Voordat we beginnen is het belangrijk om Laravel te vertellen waar onze applicatie draait, open daarom even NaamvanJouwSite/app/config/app.php en zoek daar naar 'url' => '' ,
en zorg er voor dat dit er zo uit ziet: 'url' => 'http://localhost/NaamVanJouwSite/public/',
Het beheren van de routes binnen je applicatie
Zoals je kunt zien op http://localhost/NaamVanJouwSite/public/ wordt er standaard een pagina geserveerd van Laravel.
Maar deze pagina wil je natuurlijk wijzigen, maar kan je dat doen?
Daarom beginnen we met het routeringssysteem van Laravel, dit klinkt ingewikkelder dan het is.
Open in PHPStorm het bestand NaamVanJouwSite/app/routes.php je treft hier de volgende code aan:
Wat hier eigenlijk staat is dat wanneer een gebruiker binnen komt op de URL "/" (je root/index) laat de gebruiker dan het View bestand "hello" zien
In dit script leg je dus alle legale routes binnen jouw applicatie vast, maak om te proberen maar eens de volgende route aan:
Wanneer je nu in de browser naar http://localhost/NaamVanJouwSite/public/hallo/daar gaat zul je zien dat dezelfde pagina wordt getoond als op de index.
Wanneer je echter naar http://localhost/NaamVanJouwSite/public/bestaatniet gaat zul je een grote oranje pagina zien met de melding "Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException" wat dus betekent dat de aangevraagde route niet bestaat in je routes bestand.
Nu is het stoppen van logica in je routes bestand niet echt netjes, en willen we ook geen waslijst van honderden routes handmatig gaan aanmaken dus we gaan er eerst voor zorgen dat alles netjes via een controller verloopt.
We zetten eerst de volgende regel onderaan in het routes bestand:
Wat we hier doen is alle routes die beginnen met /users door verwijzen naar een controller die UserController heet.
Echter bestaat deze nog niet, dus deze zullen we eerst moeten aanmaken.
Het afhandelen van route verzoeken
Open de folder NaamVanJouwSite/app/controllers en maak hier een bestand aan met de naam UserController.php hierin zetten we de volgende code:
We hebben nu dus de controller aangemaakt, die de aanvragen die op http://localhost/NaamVanJouwSite/public/users/ binnen komen gaat afvangen.
Maar hé, waarom krijg ik dan toch nog een foutmelding wanneer ik in de browser naar deze URL ga?
Dat komt omdat we binnen de class nog geen functies hebben aangemaakt, we beginnen met een index functie.
Pas de controller die we net hebben aangemaakt zodat deze er zo uit ziet:
De naam getIndex heb ik niet zomaar gekozen, het woord get geeft aan dat deze functie moet reageren op een aanvraag verzoek en het woord Index geeft aan dat het gaat om de Index pagina.
Je kan deze regel dus eigenlijk lezen als "Verzoekt de gebruiker de index functie? Zo ja, reageer er dan op".
Wanneer we nu de pagina vernieuwen zullen we wederom het welkom scherm van Laravel te zien krijgen.
De getIndex functie is wel bijzonder want deze reageert op zowel http://localhost/NaamVanJouwSite/public/users/ als http://localhost/NaamVanJouwSite/public/users/index
Dit betekent dus ook dat je een nieuw verzoek kunt aanmaken door een nieuwe functie te maken binnen de class.
En naast get is het ook mogelijk om je functie te starten met post, dit zorgt er voor dat de desbetreffende functie zal reageren op post verzoeken.
Voeg in de UserController de volgende functies toe:
En open de desbetreffende URLS eens in de browser, dit zijn:
http://localhost/NaamVanJouwSite/public/index.php/users/telefoon
localhost/NaamVanJouwSite/public/index.php/users/hallo
localhost/NaamVanJouwSite/publ…hp/users/tweehoofdletters
Je zult nu waarschijnlijk raar opkijken dat álleen de eerste URL werkt, hoe kan dit?!
Dat is nu hoe Laravel reageert op de naam van je functie, we zullen postHallo en getTweeHoofdletters even bespreken.
postHallo
Bij het aanvragen van deze pagina krijg je een foutmelding omdat deze enkel en alleen reageert op POST verzoeken. Alle GET verzoeken worden dus per definitie niet erkend.
Wil je toch http://localhost/NaamVanJouwSite/public/index.php/users/hallo openen?
Dan zul je een functie moeten aanmaken die getHallo heet, probeer het maar eens.
getTweeHoofdletters
Oké DirkZz, heel leuk en logisch alleen maal met die postHallo, maar deze functie staat gewoon aangegeven als GET. Waar werkt deze dan niet?
Deze aanvraag werkt niet omdat Laravel bij meerdere hoofdletters in de naam ervan uit gaat dat hij er dashes (het - teken) tussen moet zetten.
Wil je deze pagina bezoeken dan zul je dus naar http://localhost/NaamVanJouwSite/public/index.php/users/twee-hoofdletters moeten gaan. En je zult zien dat de pagina dan wel werkt.
Meer weten?
Bekijk de documentatie van laravel als je hier meer over wilt weten, we hebben zojuist de basis besproken maar er is veel meer mogelijk.
Meer weten over Controllers : laravel.com/docs/controllers#restful-controllers
Meer weten over Routes: laravel.com/docs/routing
Dingen om te onthouden
Krijg je de melding "Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException" dan heb je geen route naar jouw pagina gemaakt in het bestand routes.php
Word je doorgestuurd naar http://localhost/public wanneer je een pagina opent? Dan heb je de URL niet ingesteld in NaamvanJouwSite/app/config/app.php achter url => '',
De volgende keer
De code tot nu toe is te vinden op Github
Nu de basis staat gaan we in de volgende tutorial die welkom pagina van Laravel vervangen door een eigen pagina, en de eerste hand leggen aan een login systeem.
Vragen/opmerkingen?
Stel ze hier onder of stuur me een DM, ik help je graag verder
5,110 times read
Dees -
Deze tutorial is al redelijk out-dated. Route::controller is deprecated.