[TUT] Beginnen met Laravel

ICTscripters maakt gebruik van cookies. Door het gebruiken en browsen naar onze site gaat je automatisch akkoord met het gebruik van cookies. Klik hier voor meer informatie

  • 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:

    PHP Source Code

    1. Route::get('/', function()
    2. {
    3. return View::make('hello');
    4. });


    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:

    PHP Source Code

    1. Route::get('/hallo/daar', function()
    2. {
    3. return View::make('hello');
    4. });

    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:

    PHP Source Code

    1. Route::controller('users', 'UserController');


    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:

    PHP Source Code

    1. <?php
    2. class UserController extends BaseController {
    3. }

    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:

    PHP Source Code

    1. <?php
    2. class UserController extends BaseController {
    3. public function getIndex()
    4. {
    5. return View::make('hello');
    6. }
    7. }

    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:

    PHP Source Code

    1. public function getTelefoon(){
    2. return View::make('hello');
    3. }
    4. public function postHallo(){
    5. return View::make('hello');
    6. }
    7. public function getTweeHoofdletters(){
    8. return View::make('hello');
    9. }


    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

    3,701x gelezen

Reacties 9

  • D.Oomens -

    Deze tutorial is al redelijk out-dated. Route::controller is deprecated.

  • Sonam -

    Ohh wat een geweldige tutorial zeg :D heb hier heel veel wat aan! Hoewel Laravel 5 wat anders werkt

  • Bbird -

    Hele goede tutorial zeg. Net begonnen mij in Lavarel te verdiepen en zag eigenlijk door de bomen het bos niet meer. Kwam net zoals Alex deze tut tegen en begin het te snappen.

  • Alex -

    Zeer leuke tutorial, ging net beginnen met een laravel project om wat bij te leren dan kom ik dit tegen :D top!

    • DirkZz -

      Ik was gestopt met deze reeks omdat ik dacht dat het bijna niemand iets interesseerde, leuk om te lezen dat iemand er wat aan heeft. :) Misschien dat ik hem even compleet afmaak.

    • Alex -

      Zou ze zeker allemaal lezen :D Er zijn nog tal van dingen die ik zou willen bijleren, voornamelijk nu hoe het blade systeem werkt. Dit is men eerste laravel (en eerste framework) project die ik gestart ben hehe