Symfony 4.1组件-依赖注入问题 [英] Symfony 4.1 components - Dependency Injection issues

查看:71
本文介绍了Symfony 4.1组件-依赖注入问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在用PHP重构旧的应用程序.

我正在尝试使用Symphony依赖项注入组件将服务注入到控制器(或其他服务)中,但是我不知道如何实现,因为Symphony文档比框架组件更适合使用框架./p>

我已经有自己的内核,其中包含所有服务和控制器的容器(控制器已注册为服务).我的控制器从 symfony/frameworkbundle 扩展了AbstractController.所以我现在唯一能做的就是:

通过 $ this-> container-> get('service_id')从容器获取服务,但是如果构造函数中的服务将类作为参数

 公共函数__constructor(SomeClass $ someClass) 

然后我遇到了这个异常:

编译容器时,"App \ V2 \ Service \ TestService"服务或别名已被删除或内联.您应该将其公开,或者停止直接使用容器并改为使用依赖项注入.

如果我更改配置以公开所有服务,则:

函数APP \ V2 \ Service \ TestService :: __ construct()的参数太少,传递了0个且恰好期望1个

我准备了要点,以便更好地了解我在说什么: https://gist.github.com/miedzwin/49bac1cc1d5270d3ba1bfcf700abf864

有人可以帮助我使用Symfony组件(不是Symfony框架)进行DI实施吗?一个好的工作例子就足够了.或者只是将您的评论写在我的要旨上,我会尝试解决此问题.

解决方案

Symfony 4/5自动装配方式

根据您的问题和评论,我认为您需要做的就是修复自动装配.

Symfony 4向很简单:自动连接所有服务和参数,无需手动设置(如果可能).

要将其应用于您的示例,这将是满足您的需求和Symfony 4的最佳配置:

 服务:_defaults:#默认情况下将服务依赖项传递给构造函数自动连线:true#默认添加已知标签(用于命令,事件订阅者等)自动配置:true#使用测试,bin文件和另一个更简单的方法公开:真实#自动将字符串/数组/整数参数装配到构造函数#这可以解决"argument" $ facebookUserId"这样的问题方法"__construct()"的结果没有类型提示,则应显式配置其值.绑定:#$ constructorVariableName:配置中的%parameter%$ facebookUserId:'%facebook_user_id%'APP \ V2 \:资源:"../src/app/V2/*"排除:"../src/app/V2/{Script,Trait}"#symfony服务-您仍然必须手动设置3rd paryt服务Symfony \ Component \ DependencyInjection \ ParameterBag \ ContainerBag:参数:-'@service_container'#... 


在哪里继续阅读

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆