J'ai fait une nouvelle installation de Symfony en utilisant Symfony Flex et le nouveau squelette appartient à la prochaine structure de répertoire Symfony 4. J'ai ajouté et configuré un premier groupe tiers: HWIOAuthBundle. Ce bundle est utilisé pour se connecter via Twitter en utilisant deux informations secrètes. Je déclare mon consumer_id
et mon consumer_secret
dans le fichier config/packages/hwi_oauth.yaml
.Comment puis-je récupérer mes variables d'environnement dans un fichier de paramètres dans la structure Symfony4?
hwi_oauth:
firewall_names: [secured_area]
resource_owners:
twitter:
type: twitter
client_id: XXXXXMyIdXXXXX
client_secret: XXXXXMyTopSecretKeyXXXXX
Mon application fonctionne correctement. Mais je ne peux pas commettre mes secrets sur github!
Je veux avoir un fichier hwi_oauth.yaml
comme celui-ci:
hwi_oauth:
firewall_names: [secured_area]
resource_owners:
twitter:
type: twitter
client_id: '%twitter_consumer_id%'
client_secret: '%twitter_consumer_secret%'
J'ai lu le Symfony4 best practices sur le nouveau package DotEnv.
Using environment variables, while far from being perfect, have many benefits over what we currently do. Environment variables are a more "standard" way of managing settings that depend on the environment (no need to manage a parameters.yml.dist for instance).
Comme suggéré dans les meilleures pratiques, je joins ces deux lignes à .env
fichier:
TWITTER_CONSUMER_ID=XXXXXMyIdXXXXX
TWITTER_CONSUMER_SECRET=XXXXXMyTopSecretKeyXXXXX
Mais je rencontrais cette erreur:
You have requested a non-existent parameter "twitter_consumer_id".
J'ai essayé avec %kernel.twitter_consumer_id%
, %env.twitter_consumer_id%
, %env(TWITTER_CONSUMER_ID)%
sans plus de succès.
Le dernier test retourne ce message d'erreur:
An exception has been thrown during the rendering of a template ("Environment variable not found: "TWITTER_CONSUMER_ID".").
Comment puis-je récupérer mes variables ENV dans un fichier de paramètres comme hwi_oauth.yaml
?
Êtes-vous en train de charger le '.env' avec le composant' DotEnv'? – bishop
Merci @bishop! Le 'public \ index.php' contient' if (! Getenv ('APP_ENV')) {(nouveau Dotenv()) -> load (__ DIR __. '/ .. /. Env'); } 'et ce' .env' n'a pas été chargé. Ça fonctionne maintenant ! Mais la vérification est de s'assurer que nous n'utilisons pas '.env' dans la production. Je ne comprends pas comment l'utiliser en dev et encore protéger mon prod ... Est-il sécurisé de repasser le test '! Getenv ('APP_ENV')' par celui-ci: 'in_array (getenv ('APP_ENV'), [ 'dev', 'test']) '? –