我有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动态地设置这个类的值。
2条答案
按热度按时间lyfkaqu11#
我通过在
config/packages/dev/
文件夹中创建一个services.yaml
,并使用不同的设置'config/packages/prod/'解决了这个问题。4uqofj5v2#
在较新版本的symfony中,您可以使用
when@xxx
语法和接口在单个services.yaml
中执行此操作,如下所示:例如:
在消费类中,只需在构造函数中键入
Some\NameSpace\WorkerInterface
接口的提示,它就会被正确注入。当然,
Some\NameSpace\WorkerInterface
接口必须存在于代码中,并且RealServiceClass
和RealServiceClass
都必须实现该接口。