web-dev-qa-db-fra.com

Laravel La variable .env renvoie toujours null

J'ai ajouté cette variable au fichier .env

STRIPE_SECRET = a12345

Je voudrais vider la variable en utilisant routes/web.php

<?php
dd(env('STRIPE_SECRET'));

Mais il semble que cela retourne toujours null.

Mise à jour: fichier .env mis à jour. J'ai seulement supprimé DB_PASSWORD.

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:08txDXXatyYsP5WQ4ECz35Q7OyBEe8Vgb/zK5fZsHik=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
APP_LOCALE=tr
APP_LC_ALL=tr_TR.utf8

DB_CONNECTION=mysql
DB_Host=127.0.0.1
DB_PORT=3306
DB_DATABASE=gunluk
DB_USERNAME=root
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_Host=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_Host=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=03ac580c85842d
MAIL_PASSWORD=1d6d902d296942
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=

STRIPE=a123
STRIPE_SECRET=a12345
7
Erdem

La principale raison de votre problème est que vous mettez en cache votre configuration. Lorsque vous exécutez php artisan config:cache, vous stockez votre configuration dans votre cache et le prochain démarrage de Laravel ne lira pas le fichier .env car il détectera que la configuration a été stockée dans le cache. Le fichier d'environnement ne doit être utilisé que pour configurer les fichiers de configuration. Pour accéder à la valeur recherchée, utilisez UNIQUEMENT la méthode config.

Supposons que vous ayez le fichier config/stripe.php composé de ce contenu:

<?php

return [
    'secret' => env('STRIPE_SECRET', '')
];

Une fois que vous avez exécuté php artisan config:cache, accédez à cette valeur en utilisant UNIQUEMENT la syntaxe config('stripe.secret') via votre code d'application. Chaque fois que vous mettez à jour vos fichiers de configuration et votre .env, vous devez réexécuter php artisan config:cache.

7
Desh901

Tout d'abord, il n'y a pas de STRIPE_SECRET dans votre fichier .env (comme avant de modifier la question). Assurez-vous donc que votre .env doit avoir cette variable. Vous devez effacer votre cache de configuration en exécutant les commandes suivantes dans le même ordre

php artisan config:cache
php artisan config:clear 

Laravel met en cache vos fichiers de configuration pour une exécution plus rapide. Ainsi, chaque fois que vous modifiez les fichiers de configuration sur le serveur, vous devez vider le cache.

De plus, vous pouvez également exécuter ces commandes pour vider les autres caches.

php artisan cache:clear   //for clearing the cache
php artisan view:clear    //for clearing the compiled views
php artisan route:clear   //for clearing the routes cache

Vous pouvez également créer les routes pour ces commandes et appeler les commandes à partir du code également

Route::get('/cache-clear', function() {
    $exitCode = Artisan::call('cache:clear');
    echo "Cache Cleard: ".$exitCode;
});

Route::get('/view-clear', function() {
    $exitCode = Artisan::call('view:clear');
    echo "View Cleard: ".$exitCode;
});

Route::get('/route-cache', function() {
    $exitCode = Artisan::call('route:cache');
    echo "Route Cached: ".$exitCode;
});

Route::get('/route-clear', function() {
    $exitCode = Artisan::call('route:clear');
    echo "Route Cache Cleared: ".$exitCode;
});

Route::get('/config-cache', function() {
    $exitCode = Artisan::call('config:cache');
    echo "Config Cached: ".$exitCode;
});

Route::get('/config-clear', function() {
    $exitCode = Artisan::call('config:clear');
    echo "Config Cache Cleared: ".$exitCode;
});
9
RAUSHAN KUMAR

si vous avez STRIPE="a12345" ceci dans le fichier .env ou si vous modifiez un fichier .env ou un fichier config, alors suivez ces étapes

encore une chose, écrivez la valeur de la variable avec des virgules comme STRIPE="a12345"

D'abord exécuter ces commandes

  1. php artisan config:clear
  2. php artisan cache:clear

  3. composer dump-autoload

et a finalement utilisé cette commande pour obtenir une variable

dd(env('STRIPE'));

ça marche pour moi

et aussi 1 suggestion stupide: redémarrer le serveur

J'ai ajouter toutes les solutions possibles

4
Bilal Ahmed

Vous pouvez effacer le cache de configuration en utilisant les commandes suivantes

 php artisan config:clear 
    php artisan optimize
   php artisan config:cache

Assurez-vous aussi

Si vous utilisez la commande config:cache lors du déploiement, vous devez vous assurer que vous appelez uniquement la fonction env à partir de vos fichiers de configuration, et non de n'importe où ailleurs dans votre application . Si vous appelez env à partir de votre application, il est fortement recommandé d'ajouter les valeurs de configuration appropriées à vos fichiers de configuration et d'appeler env à partir de cet emplacement, vous permettant ainsi de convertir vos appels env en appels de configuration.

Ref:

https://laracasts.com/discuss/channels/general-discussion/laravel-5-environment-detection-not-working?page=1

Mis à jour:

Assurez-vous également que vous avez renommé .env.example en .env file par défaut. Laravel a .env.example

Updated 2

Selon votre nouvelle question de mise à jour, votre fichier env a STRIPE pas STRIPE_SECRETso vous avez accès comme ceci si ce n’est pas une erreur typo en question

env('STRIPE')
3
iCoders

La fonction env(...) retournera null après la mise en cache de la configuration. (à partir de laravel 5,2 à 5,7 actuel)

La documentation dit

Si vous utilisez la commande config:cache lors du déploiement, vous devez vous assurer que vous appelez uniquement la fonction env à partir de vos fichiers de configuration, et non de n'importe où ailleurs dans votre application.

Donc, la bonne réponse serait de 

Si vous appelez env depuis votre application, il est vivement recommandé d'ajouter les valeurs de configuration appropriées à vos fichiers de configuration et d'appeler env depuis cet emplacement, ce qui vous permettra de convertir vos appels env en appels de configuration.

Et je l'ai cité de la même documentation

Mais pour une solution rapide, cela suffira:

php artisan config: effacer

1
Yevgeniy Afanasyev

assurez-vous que votre application est complètement démarrée.

si vous utilisez un serveur avec cmd, essayez de redémarrer le serveur.

et si cela ne fonctionne pas, essayez d'effacer le cache en utilisant les méthodes mentionnées ci-dessus par @iCoders.

1
Moeen Basra