> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuratie

> Een uitleg van de configuratiebestanden van Laravel, omgevingsvariabelen (.env), toegang tot configuratiewaarden, caching, debugmodus en onderhoudsmodus.

## Introductie

Alle configuratiebestanden van het Laravel-framework staan in de map `config/`. Elke optie is voorzien van commentaar, dus open de bestanden gerust om de beschikbare opties te bekijken.

In de configuratiebestanden beheer je allerlei kernconfiguratiewaarden, zoals databaseverbindingsgegevens, mailservergegevens, de applicatie-URL en de encryptiesleutel.

```mermaid theme={null}
flowchart LR
    A[".env-bestand"] -->|env()| B["config/-bestanden"]
    B -->|config()| C["Applicatie"]
```

### Het `about`-commando

Met het `about` Artisan-commando krijg je een overzicht van de configuratie, drivers en omgeving van je applicatie.

```shell theme={null}
php artisan about
```

Wil je alleen een bepaalde sectie bekijken, gebruik dan de `--only`-optie.

```shell theme={null}
php artisan about --only=environment
```

Om de waarden van een specifiek configuratiebestand in detail te bekijken, is het `config:show`-commando handig.

```shell theme={null}
php artisan config:show database
```

## Omgevingsconfiguratie (.env)

Vaak wil je configuratiewaarden laten verschillen per omgeving. Bijvoorbeeld wanneer je lokaal een andere cachedriver wilt gebruiken dan in productie.

Laravel maakt dit eenvoudig met de [DotEnv](https://github.com/vlucas/phpdotenv) PHP-library. Bij een nieuwe installatie bevat de rootmap van je applicatie een `.env.example`-bestand met veelvoorkomende omgevingsvariabelen, dat tijdens het installatieproces automatisch wordt gekopieerd naar `.env`.

<Info>
  Werk je in een team, dan is het handig om het `.env.example`-bestand bij te werken en in de repository op te nemen. Door placeholderwaarden in te stellen, zien andere ontwikkelaars in het team duidelijk welke omgevingsvariabelen nodig zijn.
</Info>

### Beveiliging van het omgevingsbestand

<Warning>
  Commit het `.env`-bestand niet naar versiebeheer. Elke ontwikkelaar en server heeft een eigen configuratie nodig, en als het bestand in de repository staat, bestaat het risico dat gevoelige informatie uitlekt bij een incident.
</Warning>

Laravel heeft echter een ingebouwde functie om omgevingsbestanden te versleutelen; in versleutelde vorm kun je ze veilig in versiebeheer opslaan.

### Extra omgevingsbestanden

Bij het opstarten van de applicatie controleert Laravel of de omgevingsvariabele `APP_ENV` of het CLI-argument `--env` is opgegeven. Zo ja, dan wordt het bestand `.env.[APP_ENV]` geladen als dat bestaat. Bestaat het niet, dan wordt het standaard `.env`-bestand gebruikt.

### Typen van omgevingsvariabelen

Alle variabelen in het `.env`-bestand worden als string geparset, maar om de `env()`-functie een breder scala aan typen te laten teruggeven, zijn de volgende speciale waarden beschikbaar.

| Waarde in `.env` | Returnwaarde van `env()` |
| ---------------- | ------------------------ |
| `true`           | `(bool) true`            |
| `(true)`         | `(bool) true`            |
| `false`          | `(bool) false`           |
| `(false)`        | `(bool) false`           |
| `empty`          | `(string) ''`            |
| `(empty)`        | `(string) ''`            |
| `null`           | `(null) null`            |
| `(null)`         | `(null) null`            |

Om een waarde met spaties in te stellen, omring je die met dubbele aanhalingstekens.

```ini theme={null}
APP_NAME="My Application"
```

### Omgevingsvariabelen ophalen

Alle variabelen in het `.env`-bestand worden bij het ontvangen van een request geladen in de PHP-superglobal `$_ENV`. In configuratiebestanden kun je de waarden ophalen met de `env()`-functie.

```php theme={null}
'debug' => (bool) env('APP_DEBUG', false),
```

Het tweede argument is de standaardwaarde. Deze wordt teruggegeven als de omgevingsvariabele niet bestaat.

### De huidige omgeving bepalen

De huidige omgeving wordt bepaald door de `APP_ENV`-variabele in het `.env`-bestand. Je haalt die op met de `environment`-methode van de `App`-facade.

```php theme={null}
use Illuminate\Support\Facades\App;

$environment = App::environment();
```

Je kunt ook een argument doorgeven om te controleren of het een specifieke omgeving betreft.

```php theme={null}
if (App::environment('local')) {
    // Lokale omgeving
}

if (App::environment(['local', 'staging'])) {
    // Lokale of staging-omgeving
}
```

### Omgevingsbestanden versleutelen

Onversleutelde omgevingsbestanden horen niet in versiebeheer, maar Laravel heeft een functie om omgevingsbestanden te versleutelen.

```shell theme={null}
php artisan env:encrypt
```

Bij het uitvoeren wordt `.env` versleuteld en wordt de versleutelde inhoud opgeslagen in het bestand `.env.encrypted`. De decryptiesleutel wordt getoond in de output van het commando; bewaar die in een veilige wachtwoordmanager.

Om te ontsleutelen gebruik je het `env:decrypt`-commando.

```shell theme={null}
php artisan env:decrypt
```

## Toegang tot configuratiewaarden

Met de `Config`-facade of de globale `config()`-functie kun je vanaf elke plek in je applicatie configuratiewaarden benaderen. Je gebruikt de "dot-notatie", waarbij je de bestandsnaam en de optienaam combineert.

```php theme={null}
use Illuminate\Support\Facades\Config;

$value = Config::get('app.timezone');

// Kan ook via de globale functie
$value = config('app.timezone');

// Een standaardwaarde opgeven voor als de optie niet bestaat
$value = config('app.timezone', 'Asia/Tokyo');
```

Om configuratiewaarden tijdens runtime te wijzigen, gebruik je `Config::set()` of geef je een array door aan `config()`.

```php theme={null}
Config::set('app.timezone', 'America/Chicago');

config(['app.timezone' => 'America/Chicago']);
```

Er zijn ook getypeerde ophaalmethoden beschikbaar; als het type niet overeenkomt, wordt er een exception gegooid.

```php theme={null}
Config::string('config-key');
Config::integer('config-key');
Config::float('config-key');
Config::boolean('config-key');
Config::array('config-key');
Config::collection('config-key');
```

## Configuratie cachen

Om de performance van je applicatie te verbeteren, cache je alle configuratiebestanden in één bestand.

```shell theme={null}
php artisan config:cache
```

Dit commando bundelt alle configuratieopties in één bestand, zodat het framework ze snel kan laden.

<Warning>
  Voer het `config:cache`-commando uit als onderdeel van je deployproces naar productie. Tijdens lokale ontwikkeling verandert de configuratie vaak, dus daar wordt het afgeraden.
</Warning>

Zodra de cache is aangemaakt, wordt het `.env`-bestand niet meer geladen bij requests van het framework of bij het uitvoeren van Artisan-commando's. Daardoor geeft de `env()`-functie alleen nog omgevingsvariabelen op systeemniveau terug.

<Tip>
  Roep de `env()`-functie daarom altijd alleen aan vanuit configuratiebestanden in de map `config/`. Op andere plekken in je applicatie haal je configuratiewaarden op met de `config()`-functie.
</Tip>

Om de cache te verwijderen, gebruik je het `config:clear`-commando.

```shell theme={null}
php artisan config:clear
```

### Configuratiebestanden publiceren

De meeste configuratiebestanden van Laravel zijn al gepubliceerd in de map `config/`, maar sommige bestanden zoals `cors.php` en `view.php` zijn standaard niet gepubliceerd.

Om nog niet gepubliceerde configuratiebestanden te publiceren, gebruik je het `config:publish`-commando.

```shell theme={null}
php artisan config:publish

php artisan config:publish --all
```

## Debugmodus

De `debug`-optie in `config/app.php` bepaalt hoeveel foutinformatie aan de gebruiker wordt getoond. Deze optie volgt standaard de waarde van de omgevingsvariabele `APP_DEBUG` in het `.env`-bestand.

<Warning>
  **Zet `APP_DEBUG` in productie altijd op `false`.** Laat je hem op `true` staan, dan bestaat het gevaar dat gevoelige configuratiewaarden van je applicatie worden blootgesteld aan eindgebruikers.
</Warning>

```ini theme={null}
# Lokale ontwikkeling
APP_DEBUG=true

# Productie
APP_DEBUG=false
```

## Onderhoudsmodus

Wanneer je applicatie in onderhoudsmodus staat, wordt bij alle requests een aangepaste view getoond. Zo kun je je applicatie tijdelijk "uitschakelen" tijdens een update of onderhoudswerkzaamheden.

### Onderhoudsmodus inschakelen

```shell theme={null}
php artisan down
```

Met de `--refresh`-optie laadt de browser de pagina na het opgegeven aantal seconden automatisch opnieuw.

```shell theme={null}
php artisan down --refresh=15
```

De `--retry`-optie wordt ingesteld als de waarde van de `Retry-After` HTTP-header.

```shell theme={null}
php artisan down --retry=60
```

### De onderhoudsmodus omzeilen

Om alleen specifieke gebruikers toegang te geven via een geheime token, gebruik je de `--secret`-optie.

```shell theme={null}
php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"
```

Met de `--with-secret`-optie genereert Laravel automatisch een token.

```shell theme={null}
php artisan down --with-secret
```

### Onderhoudsmodus op meerdere servers

Standaard beheert Laravel de onderhoudsmodus op basis van bestanden. Bij een opstelling met meerdere servers is de cachegebaseerde methode handiger.

```ini theme={null}
APP_MAINTENANCE_DRIVER=cache
APP_MAINTENANCE_STORE=database
```

### De onderhoudsview vooraf renderen

Als je `php artisan down` uitvoert tijdens een deploy, kunnen gebruikers die de applicatie bezoeken terwijl de dependencies worden bijgewerkt een foutmelding te zien krijgen. Om dit te voorkomen, render je de view vooraf met de `--render`-optie.

```shell theme={null}
php artisan down --render="errors::503"
```

Je kunt tijdens de onderhoudsmodus ook alle requests naar een specifieke URL laten redirecten.

```shell theme={null}
php artisan down --redirect=/
```

### Onderhoudsmodus uitschakelen

```shell theme={null}
php artisan up
```

<Info>
  De standaardtemplate voor de onderhoudsmodus kun je aanpassen door `resources/views/errors/503.blade.php` aan te maken.
</Info>

<Tip>
  Wil je downtime volledig vermijden, overweeg dan een volledig beheerd platform zoals [Laravel Cloud](https://cloud.laravel.com).
</Tip>

## Volgende stap

<Card title="Routing" icon="route" href="/nl/routing">
  Leer de basis van routing: het koppelen van URL's aan controllers.
</Card>


## Related topics

- [Labeler](/nl/packages/laravel-bluesky/labeler.md)
- [Wachtwoordherstel](/nl/passwords.md)
- [Bestandsopslag](/nl/filesystem.md)
- [Laravel Pint](/nl/pint.md)
- [Databaseconfiguratie](/nl/database.md)
