Laravel 13-tutorial #1: het project installeren en instellen
geverifieerd op 2 september 2026 · 6 min
Installeer Laravel 13 met composer create-project laravel/laravel blog en start daarna php artisan serve. Het commando maakt zelf het bestand .env aan, genereert de application key en draait de migraties. Laravel 13 vraagt minimaal PHP 8.3 en gebruikt standaard SQLite.
Dit eerste hoofdstuk installeert Laravel 13, legt uit waar elke map in het project voor dient en start de ontwikkelserver. Aan het eind staat de welkomstpagina van Laravel in je browser.
Wat je nodig hebt
Laravel 13 vraagt minimaal PHP 8.3 en werkt met PHP 8.3, 8.4 en 8.5. Controleer je versie:
php -vAlleen de eerste regel telt. Daar moet PHP 8.3, 8.4 of 8.5 staan:
PHP 8.4.25 (cli) (built: Aug 27 2026 20:19:39) (NTS)Bestaat het commando niet of komt er een oudere versie uit, installeer dan PHP. Op Windows via WampServer of Laragon, op macOS via Homebrew met brew install php, op Linux via het pakket php-cli van je distributie.
Je hebt ook Composer nodig, de dependency manager van PHP. Die haalt Laravel binnen en alles waar het van afhangt.
composer --versionPHP-extensies
Laravel heeft een paar PHP-extensies nodig. De meeste installaties leveren ze al mee. Twee zijn het controleren waard, omdat ze je later blokkeren als ze ontbreken:
php -m | grep -E "pdo_sqlite|intl"pdo_sqlite gebruik je voor de database van deze tutorial. intl is in hoofdstuk 4 verplicht voor het adminpaneel, door hem nu te installeren voorkom je dat de installatie daar strandt.
Een editor
VS Code is gratis en ruim voldoende, met de extensie ‘PHP Intelephense’. PhpStorm is betaald en kent Laravel van huis uit. De tutorial gaat van geen van beide uit: alles gebeurt in de terminal.
Het project aanmaken
Ga naar de map waarin je je projecten bewaart en typ:
composer create-project laravel/laravel blogComposer haalt Laravel en zijn dependencies binnen in een map blog. Dat duurt een tot drie minuten, afhankelijk van je verbinding.
Sinds Laravel 11 downloadt create-project niet alleen de bestanden. Het kopieert .env.example naar .env, genereert de application key, maakt het bestand database/database.sqlite aan en draait de eerste migraties. De commando’s php artisan key:generate en php artisan migrate die je in oudere tutorials tegenkomt, zijn op een nieuw project niet meer nodig.
Controleer de geïnstalleerde versie:
cd blog
php artisan --versionLaravel Framework 13.30.1Het alternatief: de Laravel-installer
Er bestaat een globale installer die het commando inkort en je een starter kit laat kiezen:
composer global require laravel/installer
laravel new blogHandig als je vaak projecten opzet, maar het voegt een globale dependency aan je machine toe en levert soms gedoe met je PATH op. Krijg je laravel: command not found, dan legt het artikel ‘laravel: command not found’ oplossen uit hoe je dat verhelpt. Voor deze tutorial volstaat composer create-project en blijft die omweg je bespaard.
De mappenstructuur van het project
Dit staat er in de map blog. Het skelet van Laravel is sinds Laravel 8 flink afgeslankt: verschillende bestanden die oudere tutorials beschrijven, bestaan niet meer.
In de hoofdmap
app
De code van je applicatie. Vlak na de installatie staan er maar drie bestanden in: een basiscontroller, het model User en een service provider. Hier komen je controllers en je modellen bij.
bootstrap
Het bestand bootstrap/app.php is het configuratiepunt van de applicatie: daar declareer je de routes, de middleware en de foutafhandeling. In Laravel 8 en 9 was die rol verdeeld over app/Http/Kernel.php, app/Console/Kernel.php en app/Exceptions/Handler.php, die verdwenen zijn.
config
De configuratiebestanden. Laravel 13 publiceert er standaard maar tien, tegen een stuk of twintig vroeger: de rest zit nog steeds in het framework, met hun standaardwaarden. Wil je er een ophalen en aanpassen, gebruik dan php artisan config:publish.
database
De migraties (de structuur van de tabellen), de seeders (de startdata) en de factories (testobjecten). Hier staat ook database.sqlite, je database.
public
De enige map die de webserver mag tonen. Hierin staan index.php, het toegangspunt van elke request, en de bestanden die Vite compileert.
resources
De Blade-views, de CSS-bestanden en de JavaScript-bestanden vóór compilatie.
routes
De declaraties van je adressen. Laravel 13 maakt maar twee bestanden aan, web.php en console.php. De bestanden api.php en channels.php uit tutorials die voor Laravel 8 zijn geschreven, komen er niet meer standaard bij: php artisan install:api en php artisan install:broadcasting voegen ze toe zodra je ze nodig hebt. Deze tutorial gebruikt alleen web.php.
In de map app
Http/Controllers
De controllers: de code die een request opvangt, de data ophaalt en kiest welke view teruggaat.
Models
De Eloquent-modellen. Bij elke tabel in de database hoort een model waarmee je haar leest en beschrijft. Deze map bestaat sinds Laravel 8, in oudere versies stonden de modellen rechtstreeks in app.
Het project configureren
Alle configuratie die van de machine afhangt, staat in het bestand .env in de hoofdmap. De bestanden in config lezen het via de functie env(). Dat bestand hoort nooit in versiebeheer: het bevat je wachtwoorden.
De naam en het adres van de site
APP_NAME="Mon blog"
APP_URL=http://localhost:8000APP_NAME verschijnt in de titel van je pagina’s. APP_URL dient om absolute links op te bouwen, onder meer naar geüploade afbeeldingen.
De database
Laravel 13 gebruikt standaard SQLite:
DB_CONNECTION=sqliteSQLite stopt de hele database in één bestand, database/database.sqlite. Er is geen server om te starten, geen gebruiker om aan te maken, geen wachtwoord om te onthouden. Om te leren is dat de beste keuze: je gooit het bestand weg en begint opnieuw.
Heb je liever MySQL of MariaDB, maak dan de database aan en vervang deze regels:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=De tutorial werkt met allebei. In hoofdstuk 8, over de zoekmachine, duikt één verschil in gedrag op: het wordt daar gemeten en uitgelegd.
De storage-link
Bestanden die je vanuit de backoffice uploadt, komen terecht in storage/app/public, dat niet vanaf het web bereikbaar is. Dit commando legt de symbolische link die ze zichtbaar maakt:
php artisan storage:linkINFO The [public/storage] link has been connected to [storage/app/public].De server starten
php artisan serve INFO Server running on [http://127.0.0.1:8000].
Press Ctrl+C to stop the serverOpen http://127.0.0.1:8000. De welkomstpagina van Laravel verschijnt. Laat die terminal openstaan: de server draait zolang je hem niet afbreekt.
Is poort 8000 al bezet, dan stopt Laravel niet: het probeert de volgende en zegt erbij welke. Lees het getoonde adres in plaats van het te veronderstellen.
Failed to listen on 127.0.0.1:8000 (reason: Address already in use)
INFO Server running on [http://127.0.0.1:8001].Je kunt het project ook serveren met Apache, Nginx, Docker of Laravel Herd. De documentroot van de server moet dan naar de map public wijzen, nooit naar de hoofdmap van het project: die tonen zou je bestand .env downloadbaar maken.
De installatie controleren
Dit commando vat de staat van het project samen en bevestigt dat alles klaarstaat:
php artisan aboutEnvironment ........................................................
Application Name .......................................... Mon blog
Laravel Version ........................................... 13.30.1
PHP Version ................................................ 8.4.25
Composer Version ........................................... 2.10.3
Environment ................................................. local
Debug Mode ................................................ ENABLED
Drivers ...........................................................
Cache .................................................... database
Database ................................................... sqlite
Queue .................................................... database
Session .................................................. databaseHet project staat klaar. Het overzicht van de serie laat zien wat elk hoofdstuk oplevert. Het volgende hoofdstuk legt uit hoe je een adres aan je eigen code koppelt.