web-dev-qa-db-fra.com

Quelle est la différence entre utiliser env ('APP_ENV'), config ('app.env') ou App :: environment () pour obtenir un environnement d'application?

Quelle est la différence entre utiliser env('APP_ENV'), config('app.env') et App::environment() pour obtenir un environnement d'application?

Je sais que le env('APP_ENV') va $_ENV, config('app.env') lit la configuration et App::environment() est une abstraction de tout Et à mon avis, l'avantage est même celui-ci. Abstraction .

Je ne sais pas s’il existe d’autres différences, telles que le niveau de performance ou de sécurité

8
Miguel Borges

Je me sentais juste dessus. Lorsque vous mettez en cache votre fichier de configuration, env () ne fonctionnera pas (parfois?) Correctement. Donc ce que j'ai découvert:

  1. Laravel recommande d'utiliser uniquement env () dans les fichiers de configuration. Utilisez l’assistant config () dans votre code au lieu d’env (). Par exemple, vous pouvez appeler config ('app.env') dans votre code.
  2. Lorsque vous utilisez php artisan config: cache toutes les chaînes de configuration sont mises en cache par le framework et toute modification apportée à votre fichier .env ne sera active que si vous exécutez à nouveau la commande php artisan config: cache.

À partir de là: https://laracasts.com/discuss/channels/general-discussion/env-not-reading-variables-sometimes

METTRE À JOUR:
Les appels env () fonctionnent tant que vous n'utilisez pas php artisan config: cache. C'est donc très dangereux car cela fonctionnera souvent pendant le développement mais échouera en production. Voir le guide de mise à niveau: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0

UPDATE Laravel 5.6:
Laravel recommande maintenant dans sa documentation d’utiliser 

$environment = App::environment();

et décrit que env () consiste simplement à extraire des valeurs de .env dans des fichiers de configuration. Mais ceci est juste pour config ('app.env') et ne fonctionne pas pour d'autres variables comme config ('app.debug').

11
ndberg

Une chose à considérer est peut-être le facteur de commodité de passer une chaîne de caractères à app()->environment() afin de valider votre environnement actuel.

// or App:: whichever you prefer.
if (app()->environment('local', 'staging')) {
    logger("We are not live yet!");
    Seeder::seedThemAll();
} else {
    logger("We are LIVE!");
}
1
JofryHS

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

Ajoutez une option de configuration env à votre fichier de configuration app.php qui se présente comme suit:

'env' => env('APP_ENV', 'production'),

Plus: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0

0
Adam Kozlowski

Vous avez deux bonnes options

if (\App::environment('production')) {...}

ou

if (app()->environment('production')) {...}

app () -> environment () est actuellement utilisé par Bugsnag , regardez dans la documentation ici il est écrit

Par défaut, nous détectons automatiquement l’environnement de l’application en appelant la fonction environment () sur l’instance d’application de Laravel.

0
Yevgeniy Afanasyev