You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Symfony的services.yaml中动态获取服务类名配置?

Symfony服务配置:批量为子类配置工厂并动态传入自身类名

可以通过Symfony的表达式语言实现这个需求,完全在配置层面解决,无需修改工厂或子类代码。

最终配置示例

# config/services.yaml
Domain\Children\:
    resource: '../domain/children/*'
    factory: ['Domain\Factory', 'getChild']
    # 用表达式动态获取当前服务对应的类名
    arguments: ['@=service("service_container").getDefinition(serviceId).getClass()']
    autowire: false
    autoconfigure: false

配置说明

  • @=前缀表示启用Symfony表达式语言,会动态计算参数值
  • serviceId是当前批量配置中每个子类对应的服务ID(默认就是类的完全限定名)
  • 通过容器获取当前服务的定义,再提取出类名,作为参数传给工厂的getChild方法

扩展:如果需要短类名

如果工厂方法需要的是不带命名空间的短类名,可修改表达式做字符串截取:

arguments: ['@=substr(service("service_container").getDefinition(serviceId).getClass(), strrpos(service("service_container").getDefinition(serviceId).getClass(), "\\") + 1)']

注意事项

  • 确保Domain\Factory已被正确注册为服务(如果它有依赖,可单独配置自动注入)
  • 关闭autowire和autoconfigure,因为这些子类是通过工厂创建,不需要Symfony自动处理构造函数注入

内容的提问来源于stack exchange,提问作者Sleepwave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 05:27:32