Het ontwikkelen van webtoepassingen en websites is de afgelopen jaren steeds eenvoudiger geworden. Zelfs als je niet zo technisch onderlegd bent, kan je alsnog vrij geavanceerde dingen maken met producten als WordPress en Wix.

En voor de gevorderde developer bestaan er allerlei tools om het developmentproces te vergemakkelijken. Eén van de meest handige van die tools is Laravel.

Dit artikel beantwoordt de vraag “Wat is Laravel?” door een overzicht te geven van PHP frameworks die gebruikt worden binnen webdevelopment. Vervolgens geven we een overzicht wat de belangrijkste features van Laravel zijn, samen met een aantal structuren en componenten van Laravel, en natuurlijk een beschrijving van de handigste Laravel packages.

Wat is Laravel?

Het korte antwoord op de vraag “Wat is Laravel?” is dat Laravel een cross-platform PHP framework is voor het bouwen van webtoepassingen.

Maar om de voordelen en toepassingen van Laravel echt te begrijpen hebben we wat meer tekst en uitleg nodig. Met Laravel kan een developer een grote verzameling voorgeprogrammeerde functies gebruiken, zoals authenticatie, routing en HTML templating. Deze bibliotheek maakt het veel makkelijker om betrouwbare webtoepassingen te bouwen, terwijl de hoeveelheid code die je zelf nog moet schrijven zo klein mogelijk wordt.

Laravel biedt een functionele development omgeving, naast intuïtieve en heldere command-line interfaces. Daarnaast gebruikt Laravel object-relational mapping (ORM) waardoor je makkelijker data kan ophalen en bewerken.

Laravel toepassingen zijn goed op te schalen en hebben eenvoudige te onderhouden codebases. Developers kunnen naadloos functionaliteit toevoegen aan hun toepassingen dankzij het modulaire packaging systeem en robuuste dependency-beheer van Laravel.

Is Laravel frontend of backend?

Laravel is allereerst een backend development framework, maar biedt ook zeker functies voor de frontend. Maar veel features van Laravel zijn frontend onafhankelijk.

Is Laravel een programmeertaal?

Laravel is een PHP framework en gebruikt een scripttaal, en is technisch gezien niet een officiële PHP programmeertaal. Alhoewel scripttalen en programmeertalen veel op elkaar lijken, zijn er belangrijke verschillen, met name qua gebruiksgemak en hoe snel een taal uitgevoerd kan worden.

Scripttalen zijn platformspecifieke talen die geïnterpreteerd worden. Programmeertalen daarentegen zijn grotendeels onafhankelijk van platformen en worden gecompileerd. Doordat scripttalen platformspecifiek zijn, ben je afhankelijk van de compiler van de toepassing waarin gewerkt wordt.

Toepassingen die gebouwd zijn in scripttalen worden gecompileerd tijdens het uitvoeren, waardoor dus elke instructie individueel geïnterpreteerd wordt, waardoor het uitvoeren van de toepassing trager is dan die van een reeds gecompileerd toepassing. Het compileren tijdens de uitvoering zorgt er ook voor dat de toepassing afgesloten wordt wanneer er een fout in de code staat, terwijl gecompileerde programma’s al gecontroleerd worden op fouten tijdens het compileren, waardoor ze betrouwbaarder zijn in de uitvoering. Maar voor veel gebruikers wegen de nadelen van scripttalen aanzienlijk minder zwaar dan de voordelen, zoals het gebruiksgemak en herhaalbaarheid.

Wat is een PHP framework?

PHP, een herhalende afkorting voor PHP Hypertext Preprocessor, is een open source server-side scripttaal die veel gebruikt wordt binnen webdevelopment. In begin 2021 gebruikte bijna 80% van alle websites PHP. Alhoewel veel mensen PHP waarschijnlijk niet kennen, kent bijna iedereen wel één van de bekendste PHP toepassingen: WordPress.

Een PHP framework biedt een aantal bibliotheken met code die bestaan uit voorgeprogrammeerde modules waarmee een gebruiker veel sneller toepassingen kan bouwen. Dit biedt allerlei voordelen voor webdevelopers, zoals snellere development, minder code schrijven, en betere beveiliging. Ze zijn ook erg handig voor beginnende developers omdat ze je goede gewoonten qua programmeren aanleren, omdat je je code op een specifieke manier moet organiseren. Daarnaast vereisen PHP frameworks meestal minder onderhoud dan toepassingen die je helemaal zelf ontwikkelt.

Veel moderne PHP frameworks zijn object-oriented. Daardoor is het handig om wat basiskennis te hebben van concepten als classes, objects en het erven van eigenschappen, voordat je je in een framework stort.

Een MVC diagram (Bron: Wikipedia)
Een MVC diagram (Bron: Wikipedia)

PHP frameworks gebruiken een Model-View-Controller (MVC) architectuur. Als je nog nooit van de MVC architectuur hebt gehoord, het Model staat voor de data van de toepassing, samen met de bijbehorende logica. Zo kan bijvoorbeeld een tabel met data over abonnees een Model zijn. De View biedt mogelijkheden voor interactie met een gebruiker, waarvandaan de data uit het Model bekeken en bewerkt kan worden. De Controller is de link tussen de View en het Model. Anders gezegd, de Controller interpreteert de verzoeken van de gebruiker, haalt de benodigde informatie op uit het Model, verwerkt het en laat het zien via de View.

PHP toepassingen zoals WordPress hebben enkele bekende zwakke kanten. De belangrijkste voorbeelden hiervan zijn code injection en SQL injection. Laravel biedt features waarmee je SQL injection en andere aanvallen kan afslaan.

Maar developers moeten ook andere maatregelen nemen, zoals het testen op ingangen, om de beveiliging van hun toepassingen te optimaliseren. Volgens IT expert Barbara Ericson van Cloud Defense, bestaat de beveiliging van webtoepassingen uit zowel het testen op onbedoelde ingangen (penetration testing) als firewalls voor webtoepassingen, wat uiteindelijk twee kanten van dezelfde medaille zijn.

Penetratietests zijn meestal ingewikkelde tests die gedaan worden door gekwalificeerde professional in cybersecurity, die proberen in te breken in je software zonder dat ze verder iets weten van de ontwikkeling ervan, om zo zwakheden in de beveiliging te kunnen ontdekken.

Waarom zou je Laravel gebruiken?

Nu we het antwoord op “Wat is Laravel?” weten, is de volgende vraag “Waarom Laravel?” Laravel biedt een heel assortiment aan robuuste tools waarmee je het ontwikkelen van web apps makkelijker en sneller maakt, en de uiteindelijke codebase van je project zal ook beter georganiseerd en dus makkelijker te onderhouden zijn.

Enkele specifieke voordelen van Laravel zijn:

Laravel is eenvoudig te leren

Laravel is relatief eenvoudig te leren, zeker als je al wat achtergrondkennis hebt. Laravel vereist natuurlijk algemene basiskennis van PHP en concepten binnen Object-Oriented Programming (OOP), wil je het goed kunnen gebruiken. Ook het kennen van wat HTML komt goed van pas. Wat betreft MVC architectuur is het ook handig om Relational Database Management Systemen te begrijpen, zoals MySQL of PostgreSQL.

Laravel maakt het developmentproces makkelijker

Laravel is speciaal ontwikkeld om veelvoorkomende taken binnen webdevelopment projecten eenvoudiger te maken, zoals routing, authenticatie, migratie, caching en nog veel meer. Laravel maakt het makkelijk om vooraf gebouwde modules te integreren in je toepassing, via intuïtieve en expressieve Command Line Interfaces en de Composer.

Laravel heeft ook uitgebreide online documentatie, een goed startpunt voor meer ervaren ontwikkelaars. Verder zijn er online ook allerlei leermaterialen te vinden voor alle kennisniveaus.

Laravel biedt tools voor developers van alle niveaus

Laravel omschrijft zichzelf als een progressief framework, wat wil zeggen dat het verschillende functies biedt, voor gebruikers van verschillende niveaus. Zo zijn er bijvoorbeeld startpakketten voor beginner, met modules zoals eenvoudige authenticatie. Dergelijke tools zullen we hieronder verder bekijken.

Laravel projectstructuur. (Bron: ITSolutionStuff.com)
Laravel projectstructuur. (Bron ITSolutionStuff.com)

Gebruikers met meer ervaring kunnen de engines onder de startpakketten gebruiken om hun eigen authenticatie processen te bouwen en die vervolgens te integreren met een frontend naar wens.

Laravel is eenvoudig op te schalen

Laravel is ontzettend makkelijk op (en af) te schalen Met geïntegreerde ondersteuning voor snelle distributed cache systemen, kunnen Laravel toepassingen miljoenen verzoeken per maand verwerken. Daarnaast biedt Laravel een serverless deployment platform, Vapor, dat op AWS is gebouwd en ook goed schaalbaar is.

Laravel heeft een enorm ecosysteem en actieve community

Laravel heeft een enorm ecosysteem dat onderhouden wordt door een grote groep developers. Doordat Laravel één van de meestgebruikte PHP frameworks is, krijg je ook toegang tot een grote hoeveelheid Laravel toepassingen en packages. Je kan zowel officiële Laravel packages als packages van externen vinden.

De officiële packages van Laravel (waarvan we een aantal zometeen gaan bekijken) bieden bijvoorbeeld authenticatie, serverbeheer, verrekenen van abonnementen, browser testing en automatisering, en nog veel meer. Verder kan je op allerlei websites externe packages vinden, zoals op Packalyst en Laravel News.

Er is ook een hoop informatie te vinden in de Laravel developer community. Wanneer je als developer een vraag hebt kan je geheid een antwoord vinden via één van de vele Laravel forums, zoals Laravel.io, de Laravel subreddit, of Laracasts.

Laravel wordt veel gebruikt

Veel bedrijven gebruiken Laravel om allerlei websites te bouwen:

Vacations by Rail is een website waar je treinreizen kan plannen, en is gebouwd op het Laravel PHP framework. Het is ook meteen geïntegreerd met de boekingen-engine van Softrip.

Vacations by Rail gebruikt Laravel
Vacations by Rail gebruikt Laravel

De SetApp website met selecties van apps voor Mac en iOS is ook op het Laravel PHP framework gebouwd.

SetApp is gebouwd met Laravel.
SetApp is gebouwd met Laravel.

De restaurantenzoek-app Restaurants.com is eenvoudig te gebruiken, doordat het gebouwd is met de templates voor Laravel mobiele apps.

Restaurants.com draait op Laravel.
Restaurants.com draait op Laravel.

Wat kan je doen met Laravel?

De lijst met features van Laravel is veel te lang om hier even in een kort overzicht te zetten. Maar enkele van de belangrijkste features zijn bijvoorbeeld:

Route handling

Laravel biedt heldere en intuïtieve route handling, waarbij eenvoudige namen worden gebruikt voor routes, in plaats van lange routepaden. Door gebruik te maken van route identifiers wordt het ook veel makkelijk om toepassingen te onderhouden, doordat je de naam van een route maar op één plek hoeft te veranderen, in plaats van overal in je code. Alle webinterface routes in een Laravel toepassing worden geregistreerd in het bestand routes/web.php.

Beveiliging

Laravel biedt een aantal belangrijke beveiligingsfeatures, zoals de authenticatie van gebruikers, autorisatie van gebruikersrollen, verificatie van e-mailadressen, versleuteling, hashing van wachtwoorden en herstelfuncties voor wachtwoorden.

Migratie

Laravel biedt versiebeheer voor databases van toepassingen via migraties. Migraties houden bij hoe een database wordt aangepast, waardoor het makkelijk is een database te verwijderen of juist herstellen, wanneer nodig.

Templating

Blade is de PHP templating engine van Laravel. PHP templating engines helpen bij het scheiden van zakelijke logica in HTML templating, waardoor je een codebase krijgt die eenvoudiger te onderhouden is. Veel van de features van Laravel zijn afhankelijk van Blade templates. Blade biedt meer functionaliteit dan andere templating engines, omdat je bij Blade pure PHP code kan gebruiken, wat bij anderen niet mogelijk is.

Sessies

Laravel gebruikt sessies om informatie over de gebruiker op te slaan uit verschillende verzoeken. Cookies zijn een bekend voorbeeld van een ingebouwde Laravel session driver.

Data validatie

Laravel maakt het eenvoudig om inkomende gebruikersdata te valideren. Laravel bevat al een aantal validatieregels voor data, met foutmeldingen die je zelf in kan stellen.

Cache handling

Laravel biedt ondersteuning voor het cachen van data zodat het uitvoeren van taken door toepassingen zo snel mogelijk gaat. De cache API van Laravel ondersteunt allerlei externe cache backends, zoals Memcached en Redis.

Foutverwerking

Wanneer je begint met een nieuw Laravel project, wordt de foutverwerking automatisch ingesteld. Je kan Laravel toepassingen in debug modus uitvoeren, waarbij je gedetailleerde foutmeldingen krijgt van elke fout die opkomt.

Testen

Laravel biedt standaard uitgebreide testmogelijkheden. Laravel ondersteunt unit testing, waarbij je kleine, geïsoleerde stukje code test, naast het testen van hele features, waarbij je grotere stukken code en functies kan testen.

Beheer van opslag en bestanden

Laravel gebruikt het Flysystem PHP package om drivers te bieden waarmee je met allerlei bestandssystemen kan werken, van lokale filesystems tot cloud-based opslag zoals Amazon S3. Ook kan je bestanden verzenden met Laravel via het SSH File Transfer Protocol (SFTP).

Email

Laravel bevat een email API gebaseerd op de SwiftMailer library, waarmee je mails kan versturen via een dienst naar keuze. Ook worden bijlagen en ingeplande mails ondersteund.

Meldingen

Laravel ondersteunt het versturen van meldingen via verschillende kanalen, van bekende kanalen zoals sms en Slack tot kanalen die speciaal ontwikkeld zijn door de Laravel community.

Hoe werkt Laravel?

Om goed te begrijpen wat Laravel allemaal kan doen, is het belangrijk om te begrijpen hoe Laravel verzoeken afhandelt, oftewel de request lifecycle. Zoals hierboven al geïntroduceerd gebruikt Laravel MVC architectuur, waarbij verzoeken van gebruikers afgehandeld worden, de Controller vervolgens data ophaalt en verwerkt uit het Model en die informatie vervolgens aan de gebruiker toont in een View.

Een verzoek komt de Laravel toepassingen binnen via het bestand public/index.php, dat vervolgens de rest van het framework laadt en een instance van de Laravel toepassing ophaalt. Nadat de toepassing is opgehaald, wordt het verzoek naar de console kernel of HTTP kernel doorgestuurd.

De kernel definieert een selectie van bootstrappers die taken afhandelen die klaar moeten zijn voordat de verwerking van het verzoek gedaan kan worden, naast het definiëren van eventuele middleware waar verzoeken doorheen moeten voordat ze verwerkt kunnen worden. Onder deze pre-handling taken hoort ook het laden van eventuele vereiste serviceproviders.

Nadat de bootstrapping klaar is en de serviceproviders geregistreerd zijn, wordt het verzoek doorgezet naar de router, die het weer doorstuurt naar een route of controller. Daarnaast voert de router ook eventuele middleware uit die nodig is voor de route. Nadat het verzoek door alle vereiste middleware heen is, wordt er een route of controller method uitgevoerd met een antwoord die de hele keten weer teruggaat tot de View.

How Do You Get Started With Laravel?

Om te beginnen met Laravel moet je eerst de belangrijkste structuren en functionaliteit van Laravel goed begrijpen.

Service containers

De service container is een belangrijk onderdeel binnen Laravel. Service containers beheren de dependencies tussen classes en de injectie van dependencies.

Laravel service containers. (Bron: Christopher Rumpel)
Laravel service containers. (Bron: Christopher Rumpel)

Binnen een service container kan een developer alles bij elkaar halen wat nodig is om een Laravel toepassing uit te voeren.

Service providers

Net zo belangrijk zijn de Laravel serviceproviders, classes en dependencies die in de service containers worden geplaatst.

Facades

Een façade binnen de context van Laravel is een statische interface voor gebonden classes binnen de service container. Facades maken je leven aanzienlijk makkelijker, doordat ze eenvoudig te onthouden syntax bieden, in plaats van lange class namen.

Packages

Packages gebruik je om functionaliteit toe te voegen aan Laravel. Er zijn zowel onafhankelijke (stand-alone) packages als toepassingsspecifieke packages te vinden. Service providers vertellen Laravel waar package resources geladen moeten worden.

Net als veel andere lokale developmenttools, gebruikt Laravel Docker. Docker is een container-based tool waarmee developers hun toepassingen makkelijker kunnen maken en uitrollen. Door Docker containers te gebruiken, kan een developer een toepassing verpakken samen met de benodigde dependencies, en het als één totaalpakket inzetten.

Command-Line Interfaces

Laravel bevat een aantal Command-Line Interfaces (CLI’s). De Artisan Console bevat opdrachten waarmee developers snel basiscode kunnen neerzetten, en kan herhalende taken vereenvoudigen en automatiseren, waardoor je makkelijker een toepassing kan bouwen. Sail is een Command-Line Interface die wat meer lichtgewicht is, en is in Laravel 8 toegevoegd. Een developer kan Docker, de standaard development omgeving, gebruiken via Sail.

Laravel Artisan CLI. (Bron: tutorialspoint.com)
Laravel Artisan CLI. (Bron: tutorialspoint.com)

Eloquent

Eloquent is een object-relational mapper (ORM) waarmee je makkelijker kan werken met databases. Door de MVC architectuur komen de modellen overeen met individuele tabellen binnen een database. Met Eloquent kunnen developers erop vertrouwen dat ze eenvoudig data kunnen ophalen, opslaan en updaten, en dat onderlinge relaties op een intuïtieve manier worden gedefinieerd.

Composer

Composer is een externe PHP dependency managementtool op het niveau van de toepassing. Composer kan de libraries, modules en plugins beheren die een Laravel toepassing nodig heeft.

Homestead

Laravel Homestead is een development omgeving waarmee je op een virtuele machine kan ontwikkelen door een voorverpakte Vagrant box te bieden. Homestead bevat alles wat nodig is voor het ontwikkelen van Laravel toepassingen, waaronder PHP, MySQL, Nginx, Composer, Redis, en nog veel meer, zodat je als developer dit niet meer op je eigen computer hoeft te installeren. Homestead vereist wel het installeren van Vagrant en VirtualBox of Parallels.

Startpakketten voor authenticatie

Laravel bevat een aantal packages waarmee developers sneller aan de gang kunnen. Voordat je daar meteen induikt, wil je wellicht eerst eens kijken naar alle beschikbare resources voor het leren van Laravel. Laravel bevat een aantal startpakketten waarmee je veelgebruikte functies snel kan implementeren.

Laravel Breeze is een startpakket voor authenticatie. Er zitten ook veelgebruikte features voor authenticatie en gebruikersaccounts in, zoals gebruikersregistratie, inloggen, e-mailverificatie en het bevestigen en herstellen van wachtwoorden. Breeze biedt ook een JavaScript frontend via Vue. Breeze heeft een standaard view layer met Blade sjablonen en Tailwind CSS.

Voor meer geavanceerde authenticatie features biedt Laravel nu Jetstream, sinds Version 8. Naast de features in Breeze, biedt Jetstream ook extra geavanceerde features, zoals twee-factorverificatie, sessiebeheer, API ondersteuning via Laravel Sanctum, en optioneel teambeheer.

Voor developers die graag hun eigen authenticatie frontend willen gebruiken, biedt Laravel Fortify aan, een authenticatie backend waarbij je elke gewenste frontend kan gebruiken. Fortify is de engine voor de Jetstream authenticatie starterskit en bevat alle Laravel authenticatie features, zoals gebruikersregistratie, login, emailvalidatie, twee-factorverificatie, enzovoort. Fortify is niet de onderliggende engine voor Laravel Breeze.

Laravel biedt ook authenticatie via social media (OAuth) door middel van Laravel Socialite.

Voor developers die hun toepassingen willen uitrollen met zo weinig mogelijk serverconfiguratie of zelfs serverless deployment willen, biedt Laravel nu Forge en Vapor. Forge biedt deployment via verschillende infrastructuur providers met minimale configuratie. Vapor is een serverless deployment platform dat op AWS draait.

Voor mensen op zoek naar de volgende stap, kunnen developers hun Laravel toepassingen ook implementeren via self-hosted websites. Dit komt omdat het zelf hosten van je website meestal vereist dat je meerdere gedefinieerde databases opzet met één PHP opdracht (door middel van de nieuwste versie), naast SSH toegang tot de server. Laravel maakt dit allebei mogelijk binnen een open source PHP framework en is eenvoudig te installeren.

Wat kan Laravel nog meer?

Een betere vraag is “Wat kan Laravel eigenlijk niet?”. Er bestaan duizenden packages voor allerlei functies. Enkele van de interessantere officiële Laravel packages zijn:

Cashier en Spark

Laravel Cashier biedt een interface voor het in rekening brengen van abonnementen via Stripe en Paddle. Cashier biedt ook geavanceerde abonnementsfuncties, zoals korting en annuleringstermijnen.

Cashier is de engine achter Laravel Spark, een rekeningenbeheer panel waarmee gebruikers abonnementen kunnen maken en beheren. Spark beperkt zich tot Stripe en Paddle als betalingsproviders, customer providers werken nog niet met Spark. Maar bij Spark kan je wel de frontend kiezen als developer.

Valet

Laravel Valet is een macOS development omgeving dat zich richt op snelheid en zo weinig mogelijk gebruik van resources (ongeveer 7 MB RAM). Valet is niet bedoeld als vervangen van Sail of Homestead. In plaats daarvan is het bedoeld voor gebruikers met specifieke behoeften of beperkingen qua resources.

Voor meer packages kan je op de Laravel website kijken of op Packalyst.

Laravel nu

De huidige versie van Laravel is versie 9, oorspronkelijk uitgebracht in februari 2022. De versie bevat enkele nieuwe features en verbeteringen. Enkele nieuwe features in versie 8 zijn Laravel Jetstream, job batching (waarmee je in één keer meerdere taken kan uitvoeren en vervolgens bepaalde acties), Dynamic Blade onderdelen (waarmee je runtime component rendering op basis van een runtime waarde kan gebruiken) en het standaard gebruiken van Tailwind CSS in de Laravel paginator, naast nog allerlei andere functies. Er zijn ook verbeteringen doorgevoerd qua rate limiting en onderhoudsmodus.

In het verleden waren er om de zes maanden nieuwe Laravel releases. Dit leidde echter tot veel vragen, opmerkingen en verwarring over het nieuwe releaseproces van Laravel. Met de release van Laravel 9 in februari 2022, is het framework nu overgegaan op een major release cyclus van 12 maanden.

Samenvatting

Developers die op zoek zijn naar mogelijkheden voor het snel en eenvoudig ontwikkelen van webtoepassingen zouden moeten overwegen om Laravel te leren. Laravel biedt een uitgebreide en robuust set met resources waarmee het ontwikkelproces makkelijker wordt doordat je allerlei functies niet meer zelf hoeft te programmeren.

Laravel biedt ook een veilige virtuele ontwikkelomgeving en intuïtieve Command-Line Interfaces. En doordat Laravel eenvoudig te leren is en goed ondersteund wordt met een uitgebreide community en ecosysteem, is het een logische keuze voor veel developers, zowel beginners als experts met jaren ervaring.