Introductie
Het configuratiesysteem van Laravel is ontworpen met een duidelijke regel: environment-variabelen zouden alleen in config-bestanden benaderd moeten worden, en applicatiecode zou altijd config() moeten gebruiken. Dit patroon zorgt ervoor dat het cachen van configuratie correct werkt en dat environment-checks betrouwbaar zijn. Daarnaast verbetert het gebruik van constanten en taalbestanden in plaats van hardcoded strings de onderhoudbaarheid.
Waarom
- Compatibiliteit met caching: Directe
env()-aanroepen gevennullterug wanneer de config gecachet is, het gebruik vanconfig()werkt altijd correct - Gecentraliseerde instellingen: Alle configuratie staat in config-bestanden, waardoor het eenvoudig is om te vinden en te controleren wat de applicatie gebruikt
- Betrouwbare environment-checks:
App::environment()enapp()->isProduction()werken ongeacht het cachen van configuratie, in tegenstelling totenv('APP_ENV') - Veiligheid bij refactoren: Het gebruik van class-constanten in plaats van magische strings voor model-states en -types maakt refactoren in de IDE mogelijk en elimineert bugs door typefouten
Geschikt voor
- Alle Laravel-applicaties
- Applicaties die uitgerold worden met
config:cache(oftewel de meeste productieomgevingen) - Projecten met meerdere omgevingen (local, staging, production)
Minder geschikt voor
- N.v.t., deze praktijken zijn van toepassing op elke Laravel-applicatie
Voorbeelden
env() alleen in config-bestanden
// Slecht: geeft null terug wanneer de config gecachet is
$key = env('API_KEY');
// Goed: definieer in config, gebruik via config()
// config/services.php
'key' => env('API_KEY'),
// Applicatiecode
$key = config('services.key');
Gebruik App::environment() voor environment-checks
// Slecht: gaat stuk met config-caching
if (env('APP_ENV') === 'production') {
// Goed: altijd betrouwbaar
if (app()->isProduction()) {
// of
if (App::environment('production')) {
Gebruik constanten in plaats van magische strings
// Slecht: foutgevoelige magische string
return $this->type === 'normal';
// Goed: refactorbare constante
return $this->type === self::TYPE_NORMAL;
Gebruik taalbestanden wanneer ze al aanwezig zijn
Als de applicatie al taalbestanden gebruikt voor lokalisatie, gebruik dan ook __() voor strings die aan gebruikers getoond worden. Introduceer geen taalbestanden puur voor Engelstalige apps, eenvoudige string-literals volstaan daar prima:
// Alleen wanneer er al lang-bestanden in het project bestaan
return back()->with('message', __('app.article_added'));
Gebruik versleutelde env voor productiegeheimen
Sla productiegeheimen nooit op in platte .env-bestanden in versiebeheer:
php artisan env:encrypt --env=production --readable
php artisan env:decrypt --env=production
Geef bij cloud-deployments de voorkeur aan de native secret store van het platform (AWS Secrets Manager, Vault, enz.) en injecteer deze tijdens runtime.