Hoofdstuk 1 van 9

Laravel 13-tutorial #1: het project installeren en instellen

geverifieerd op 2 september 2026 · 6 min

Kort antwoord

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.

Aan het einde van dit hoofdstuk, heb je een Laravel 13-project geïnstalleerd en op SQLite geconfigureerd, en verschijnt de welkomstpagina in je browser.

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:

bash
php -v

Alleen de eerste regel telt. Daar moet PHP 8.3, 8.4 of 8.5 staan:

code
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.

bash
composer --version

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

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

bash
composer create-project laravel/laravel blog

Composer haalt Laravel en zijn dependencies binnen in een map blog. Dat duurt een tot drie minuten, afhankelijk van je verbinding.

Wat het commando allemaal zelf doet

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:

bash
cd blog
php artisan --version
code
Laravel Framework 13.30.1

Het alternatief: de Laravel-installer

Er bestaat een globale installer die het commando inkort en je een starter kit laat kiezen:

bash
composer global require laravel/installer
laravel new blog

Handig 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

.env
APP_NAME="Mon blog"
APP_URL=http://localhost:8000

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

.env
DB_CONNECTION=sqlite

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

.env
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.

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:

bash
php artisan storage:link
code
INFO  The [public/storage] link has been connected to [storage/app/public].

De server starten

bash
php artisan serve
code
  INFO  Server running on [http://127.0.0.1:8000].

  Press Ctrl+C to stop the server

Open 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.

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

bash
php artisan about
code
Environment ........................................................
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 .................................................. database

Het 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.

Veelgemaakte fouten

Poort 8000 is al in gebruik php artisan serve stopt niet: het schakelt over naar 8001 en meldt dat. Lees het getoonde adres in plaats van het te veronderstellen.
De extensie intl ontbreekt Je hebt hem niet meteen nodig, maar het adminpaneel uit hoofdstuk 4 eist hem. Nu installeren voorkomt dat composer later faalt.
De documentroot wijst naar het project Apache of Nginx moeten de map public serveren, nooit de hoofdmap: anders wordt het bestand .env downloadbaar.
de bestanden api.php en channels.php ontbreken Dat is normaal sinds Laravel 11. php artisan install:api en install:broadcasting maken ze aan als je ze nodig hebt.
Nieuwsbrief

Nieuwe tests, tutorials en projecten, per e-mail.

Reproduceerbare tests, geversioneerde code, gedateerde resultaten. Nooit spam.