代码之家  ›  专栏  ›  技术社区  ›  Confidence

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

  •  0
  • Confidence  · 技术社区  · 7 年前

    我有symfony4设置

    在里面 services.yml 我配置了以下服务

    MyCompany\Interfaces\QueueProducerInterface:
      class: MyCompany\Service\KafkaProducer
      arguments:
         $queueConfig: '@queue_config'
    

    .env 文件,所以我可以稍后注入它,具体取决于env(dev,production)…所以我尝试了以下方法:

    在里面 .环境

    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 回复  |  直到 7 年前
        1
  •  1
  •   Confidence    7 年前

    我通过创造一个 services.yaml 在文件夹中 config/packages/dev/ 以及具有不同设置的“config/packages/prod/”。