【问题标题】:How can I use a class constant as the tag for bound parameter service?如何使用类常量作为绑定参数服务的标签?
【发布时间】:2019-11-23 21:57:02
【问题描述】:

我在我的配置中标记了一组实现相同接口的服务:

// services.yml
services:
  _instanceof:
     App\SomeInterface:
       tags: [ !php/const App\SomeInterface::TAG ]

(其中App\SomeInterface::TAG 的值为very_unique_identifier)

我想像这样重用这个值来绑定这个参数:

// services.yaml
 services:
  _defaults:
    autowire: true      
    autoconfigure: true 
    public: false
    bind:
      $fooStrategies: !tagged !php/const App\SomeInterface::TAG 

但是当我这样做时,我得到一个空的RewindableGenerator。

相反,我可以这样做,使用常量的文字值:

bind:
      $fooStrategies: !tagged 'very_unique_identifier'

...它按预期工作,RewindableGenerator 内部包含所有必要的服务。

如何在两个地方都使用 PHP 常量,这样我就不必在不同的地方重复值了?显然,这不是什么大不了的事,但如果可能的话,我想避免它。

【问题讨论】:

    标签: php symfony symfony4 symfony-dependency-injection


    【解决方案1】:

    您应该能够使用该值配置参数 !php/const App\SomeInterface::TAG 然后使用service.yml中的参数名。

    parameters.yml
    
    parameters:
        interfaceTag: !php/const App\SomeInterface::TAG
    

    然后

    services.yml
    
    services:
      _defaults:
         autowire: true      
         autoconfigure: true 
         public: false
         bind:
           $fooStrategies: !tagged '%interfaceTag%'
    

    【讨论】:

    • 发布问题后的一分钟结束了。似乎可以接受。让我们看看其他人是否有更直接的方法。
    猜你喜欢
    • 2014-08-22
    • 2012-03-20
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多