'Is there any way to access a Symfony secret value in userland code?
Despite making them appear to be environment variables, Symfony does not actually load secrets into the environment, so you can't access them via getenv() or $_ENV. Is there any way to access them other than via DI? I'm trying to have the secret name be stored as an entity property in a database, then have a service class read the appropriate secret's value for whichever entity is requested by the API client.
Solution 1:[1]
You can add your env values to your parameters in config/services.yaml
like that (you can even have them be booleans, JSON or whatever) :
parameters:
your_secret: '%env(YOUR_SECRET)%'
your_bool: '%env(bool:YOUR_BOOL)%'
your_json: '%env(json:YOUR_JSON)%'
Then you can, for example, retrieve it from a controller like so:
$yourSecret = $this->getParameter('your_secret');
Solution 2:[2]
In production, secrets:decrypt-to-local is recommended for performance reasons. This creates .env.prod.local and the secrets are then available in $_ENV.
When deploying, I use:
php bin/console secrets:decrypt-to-local --force --env=prod
Locally, instead of using dev secrets, I keep the values in .env.local
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Saphir |
Solution 2 | Rhydian Roberts |