У меня есть настройка Symfony 4
в services.yml у меня настроена следующая служба
MyCompany\Interfaces\QueueProducerInterface:
class: MyCompany\Service\KafkaProducer
arguments:
$queueConfig: '@queue_config'
Я хочу динамически изменить настройку в моем файле .env, чтобы я мог ввести ее позже, в зависимости от env (dev, production) .... поэтому я попробовал что-то вроде этого:
в .env
QUEUE_DRIVER = "MyCompany\Service\KafkaProducer"
а теперь в services.yaml
MyCompany\Interfaces\QueueProducerInterface:
# class: MyCompany\Service\KafkaProducer
class: '.%env(QUEUE_DRIVER)%'
arguments:
$queueConfig: '@queue_config'
но когда я запускаю, например, composer update, я получаю ошибку контейнера
Script cache:clear returned with error code 1
!!
!! In Compiler.php line 112:
!!
!! Incompatible use of dynamic environment variables "QUEUE_DRIVER" found in p
!! arameters.
!!
!!
!! In AbstractRecursivePass.php line 123:
!!
!! Invalid service "MyCompany\Interfaces\QueueProducerInterface": class ".%env(
!! QUEUE_DRIVER)%" does not exist.
!!
!!
как мне решить эту проблему? или, лучше сказать, как я могу динамически установить значение этого класса в зависимости от ENV.






Я решил это, создав services.yaml внутри папки config/packages/dev/, а также config / packages / prod / с другими настройками.
Кажется, что вы не можете использовать env var в имени класса обслуживания, потому что env vars недоступны во время компиляции. см. github.com/symfony/symfony/issues/20850