'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