【问题标题】:Use config.yml parameters in service's tag definition在服务的标签定义中使用 config.yml 参数
【发布时间】:2016-09-08 06:43:50
【问题描述】:

我想在我的 Bundle 服务配置的标签定义中加入一个类名(用户已在 app/config/config.yml 中配置)。

app/config/config.yml:

my:
    class_name: AppBundle\Entity\Product

我的包配置:services.xml

<service id="my.entity_listener" class="My\EventListener\MyListener">
    <tag name="doctrine.orm.entity_listener" entity="%my.class_name%" event="preUpdate" />
</service>

这有可能吗?我能得到的只有 %my.class_name%。它不会在标签定义中被替换。虽然,我的依赖注入正在工作,因为它在同一个配置文件中很好地替换了它:

<service id="my.param_converter" class="My\ParamConverter\MyParamConverter">
    <tag name="request.param_converter" converter="user" priority="10" />
    <argument type="service" id="doctrine.orm.default_entity_manager" />
    <argument>%my.class_name%</argument> <!-- Replaced by AppBundle\Entity\Product -->
</service>

【问题讨论】:

标签: php symfony dependency-injection


【解决方案1】:

在我的项目中,如果我想在 config.yml 中全局添加一些自定义参数,我会这样做:

parameters:
    my:
      - {class_name: "AppBundle\Entity\Product"}

【讨论】:

  • 你把yout bundle的所有配置都放在parameters.yml中了吗?在这种情况下,您如何使用验证?使用你的 bundle 的人怎么知道他们必须把它的配置放在他们自己的 parameters.yml 文件中??
【解决方案2】:

也许尝试像这样使用parameters 而不是my:

parameters:
    class_name: AppBundle\Entity|Product

然后将其用作%class_name%

【讨论】:

  • 与上面的 stuzzo 相同的问题:您是否将 yout 捆绑包的所有配置都放在 parameters.yml 中?在这种情况下,您如何使用验证?使用你的 bundle 的人怎么知道他们必须把它的配置放在他们自己的 parameters.yml 文件中??
  • 查看 Cerad 的新评论:stackoverflow.com/questions/39384214/… - 这就是我在捆绑包中的做法(但我没有将它们中的任何一个作为开源发布 - 我们在内部使用它们) .
  • 另外,看看其他人在一些流行的捆绑包中是如何做到的。这里有来自 NelmioApiDocBundle 的NelmioApiDocExtension.php。如您所见 - 他们从配置中读取所有内容并在运行时将其传递给参数。
  • 是的,我也是这样做的
  • 我在 DependencyInjection 中获取 config.yml 值并将它们设置为参数。当我尝试在&lt;argument&gt;%my.class_name%&lt;/argument&gt; 中替换它时,它可以完美运行,但是当我在&lt;tag name="doctrine.orm.entity_listener" entity="%my.class_name%" event="preUpdate" /&gt; 中替换它时,它就不再起作用了。我知道我的英语并不出色,但我认为我的问题很清楚......正如我所说的“虽然,我的依赖注入正在工作,因为它在同一个配置文件中很好地替换了它。”......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 2016-09-18
  • 1970-01-01
相关资源
最近更新 更多