Как скрестить «symfony/dependency-injection» с переменными окружения?

Для скрещивания "symfony/dependency-injection" с переменными окружения в Symfony, вам потребуется настроить контейнер зависимостей для внедрения этих переменных окружения в ваши сервисы или параметры.

Следующие шаги позволят вам использовать переменные окружения с помощью "symfony/dependencey-injection":

1. Добавьте зависимость "symfony/dependencey-injection" в ваш файл composer.json командой:

composer require symfony/dependency-injection

2. Создайте класс (например, AppParameters), который будет ответственным за загрузку переменных окружения:

<?php

namespace App;

use SymfonyComponentDependencyInjectionParameterBagParameterBagInterface;

class AppParameters
{
    private $params;

    public function __construct(ParameterBagInterface $params)
    {
        $this->params = $params;
    }

    public function get(string $name)
    {
        return $this->params->get($name);
    }
}

3. Создайте файл config/services.yaml (если его еще нет), где вы определите соответствующий сервис для загрузки переменных окружения:

services:
    AppAppParameters:
        arguments:
            $params: '%env(ENV_VARIABLE)%'

Поменяйте ENV_VARIABLE на имя желаемой переменной окружения, которую вы хотите использовать.

4. Теперь вы можете внедрить класс AppParameters в любой из ваших сервисов. Например, если у вас есть сервис AppLogger, который нуждается в доступе к переменной окружения:

<?php

namespace App;

use PsrLogLoggerInterface;

class AppLogger
{
    private $logger;
    private $appParams;

    public function __construct(LoggerInterface $logger, AppParameters $appParams)
    {
        $this->logger = $logger;
        $this->appParams = $appParams;
    }

    public function logSomething()
    {
        $envVariable = $this->appParams->get('ENV_VARIABLE');
        $this->logger->info('Value of ENV_VARIABLE: '.$envVariable);
    }
}

Теперь, при вызове метода logSomething в вашем сервисе AppLogger, переменная окружения будет доступна через $this->appParams->get('ENV_VARIABLE'). Вы также можете использовать переменные окружения в качестве параметров в services.yaml, валидаторах, контроллерах и в других местах вашего приложения, где используется контейнер зависимостей.