在系统中从.env或ENV设置服务类

时间:2018-05-31 08:23:05

标签: php symfony symfony4

我有symfony 4 setup

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动态设置该类的值。

1 个答案:

答案 0 :(得分:1)

我通过在文件夹services.yaml内创建config/packages/dev/以及`config / packages / prod /'有不同的设置。