PrimuS
PrimuS

Reputation: 2683

Symfony 4 Console Command not reading env vars

I have a small console command where I'd like to read some environment variables, but it does not seem to read the vars from the .env file or the server configs in the console (php file works)

The code

protected function execute(InputInterface $input, OutputInterface $output)
{
    $io = new SymfonyStyle($input, $output);
    $debug = $input->getArgument('debug') === 'y' ? true : false;
    $this->project = $input->getArgument('project');

    $start = new DateTime();

    $debug ? $io->text('<fg=green>Starting upload</>') : null;
    dump(getenv('APP_ENV'));
    dump(getenv('MAILER_USERNAME'));
    die;
    ...
}

Commands to test

php bin/console app:make-backup

Output:

Starting upload
false
false

php bin/console app:make-backup --env=prod

Output:

Starting upload
"prod"
false

php bin/console app:make-backup --env=dev

Output:

Starting upload
"dev"
false

.env File

APP_ENV=dev
[email protected]

I don't see where I am doing wrong? Issue exists on nginx and apache server, BUT using getenv('MAILER_USERNAME') in any php-file works.

Upvotes: 2

Views: 7775

Answers (1)

Cerad
Cerad

Reputation: 48865

I think your best bet would be to go ahead and inject the env variables. Trying to access them directly can be a bit tricky.

# config/services.yaml
services:
    App\Command\MyCommand:
        $appEnv:         '%env(APP_ENV)%'
        $mailerUsername: '%env(MAILER_USERNAME)%'

# src\Command\MyCommand
class MyCommand extends Command {
    protected static $defaultName = 'app:mine';

    private $appEnv;
    private $mailerUsername;

    public function __construct($appEnv,$mailerUsername) {
        parent::__construct();
        $this->appEnv = $appEnv;
        $this->mailerUsername = $mailerUsername;
    }
    protected function execute(InputInterface $input, OutputInterface $output) {
        $output->writeln(("My Command " . $this->appEnv . " " . $this->mailerUsername));
    }
}

Upvotes: 6

Related Questions