Symfony 4.1 组件 - 依赖注入问题

2024-05-09

我正在用 PHP 重构旧应用程序。

我正在尝试使用 Symfony 依赖注入组件将服务注入控制器(或其他服务),但我不知道如何实现这一点,因为 symphony 文档比框架组件更适合使用框架。

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

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

public function __constructor(SomeClass $someClass)

然后我得到这个异常:

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

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

函数 APP\V2\Service\TestService::__construct() 的参数太少,已传递 0 个,预期为 1 个

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

有人可以帮助我使用 Symfony 组件(不是 Symfony 框架)进行 DI 实现吗?好的工作示例就足够了。或者请把你的评论放在我的要点上,我会尽力解决这个问题。


Symfony 4/5 自动装配方式

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

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

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

services:
    _defaults:
        # pass service dependencies to constructors by default
        autowire: true

        # add known tags (for commands, event subscribers etc) by default
        autoconfigure: true
        
        # to make using tests, bin files and another simpler
        public: true

        # autowiring of string/array/int parameters to constructors
        # this fixes cases like "argument "$facebookUserId" of method "__construct()" has no type-hint, you should configure its value explicitly"
        bind:
            # $constructorVariableName: %parameter% in config
            $facebookUserId: '%facebook_user_id%'

    APP\V2\:
        resource: '../src/app/V2/*'
        exclude: '../src/app/V2/{Script, Trait}'

    # symfony services - you still have to setup 3rd paryt services manually
    Symfony\Component\DependencyInjection\ParameterBag\ContainerBag:
        arguments:
            - '@service_container'
    # ...

在哪里继续阅读

  • 将参数传递给服务 https://stackoverflow.com/a/49084402/1348344
  • 如何重构 Symfony 3.3 中新的依赖注入功能 https://www.tomasvotruba.cz/blog/2017/05/07/how-to-refactor-to-new-dependency-injection-features-in-symfony-3-3/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony 4.1 组件 - 依赖注入问题 的相关文章

随机推荐

  • 如何在 Ivy 中使用不同的分类器下载多个 Maven 依赖项?

    我试图依靠Neo4j 服务器 jar http repo neo4j org content repositories snapshots org neo4j app neo4j server 1 5 SNAPSHOT neo4j serv
  • Floyd-Warshall 算法:获取最短路径

    假设一个图由一个表示n x n维数邻接矩阵 我知道如何获得所有对的最短路径矩阵 但我想知道有没有办法追踪所有最短路径 Blow是python代码实现 v len graph for k in range 0 v for i in range
  • Backbone-relational 无法实例化两个 RelationalModel 对象

    我正在尝试实现 BackboneRelational 并不断获得 无法实例化多个 Backbone RelationalModel 每种类型都有相同的 ID class App Models User extends Backbone Re
  • WordPress .htaccess www。不强迫

    我正在尝试强迫www 在我网站的所有页面上 我将 WordPress 安装在我的主站点 blog 上的一个文件夹中 在 blog 文件夹中有一个 htaccess 文件 其中包含以下内容
  • 管理文件字段当前 url 不正确

    在 Django 管理中 只要有 FileField 编辑页面上就会有一个 当前 框 其中包含指向当前文件的超链接 但是 此链接会附加到当前页面 url 因此会导致 404 因为不存在这样的页面 例如 http 127 0 0 1 8000
  • 当创建 Android Jetpack Compose AndroidView 的参数发生变化时,如何替换它?

    我有一个应用程序 显示封装在其中的几个不同视图AndroidView 在下面重现的简单示例中 这些只是TextView实例 问题是更改文本 在本例中循环显示三个不同的值 似乎不会更新应用程序显示的内容 sealed class AppVie
  • Java 中意外的负数

    import java util public class Prac9FibonacciNumbers public static void main String args int x new int 100 x 0 1 x 1 1 fo
  • 如何在 PHP 中递归删除目录及其全部内容(文件+子目录)? [复制]

    这个问题在这里已经有答案了 如何在 PHP 中删除目录及其全部内容 文件和子目录 手册页中的用户贡献部分rmdir http www php net rmdir包含一个不错的实现 function rrmdir dir if is dir
  • 内联 svg 不显示在 xhtml 中

    我创建了一个带有内联 SVG 的 XHTML 文件 当测试为 XHTML 时 它不会显示 但当测试为 HTML 时 它会显示 我已经搜索过互联网并相信我已经指定了正确的名称空间等 但是 我很困惑为什么它没有显示 请帮助我理解我做错了什么 注
  • 如何使用 UUID 生成唯一的正 Long

    我需要为我的数据库主键列生成唯一的长 ID 我以为我可以用UUID randomUUID getMostSignificantBits 但有时它也会产生一些负多头 这对我来说是个问题 是否可以从 UUID 中仅生成正长 将会有数十亿个条目
  • Apscheduler 运行一次然后抛出 TypeError

    我正在尝试每小时将某人的 soundcloud 关注者列表添加到数据库中 我有代码可以提取他们的关注者列表并将它们添加到数据库中 但是当我将它与 apscheduler 一起使用时 我遇到了错误 这是错误的示例 Traceback most
  • 如何获取调用函数的“this”值?

    如果我有一个这样的函数 function foo this console log this function bar bar prototype func function foo this var test new bar test f
  • 我可以仅在少数情况下关闭模拟吗

    我有一个始终使用模拟的应用程序 但是 当用户以管理员身份登录时 一些操作需要他们写入服务器本身 现在 如果这些用户在实际服务器上没有权限 有些用户没有 则不会让他们写入 我想做的是关闭几个命令的模拟 有没有办法做这样的事情 using Ho
  • 如何最好地实现多个重叠元素的翻转和推出事件?

    Problem 我正在开发一个网站 其中有一个 拨号盘 显示代表伞式公司不同部门的多个选项卡 目前我已经用 HTML CSS 准备好了一切 每个选项卡的定位 内圈处于较高位置z index因为选项卡在滚动时需要向外动画 我可以实现这部分 选
  • 如何从数据框的单元格中获取值?

    我构建了一个条件 从我的数据框中提取一行 d2 df df l ext l ext df item item df wn wn df wd 1 现在我想从特定列中获取一个值 val d2 col name 但结果 我得到一个包含一行和一列
  • 使用JS将图像的特定背景颜色设置为透明

    我正在使用以下代码来修改图像的透明度 然而 我想做的只是修改图像的背景颜色并将其 alpha 通道设置为 0 而不是整个图像 以下代码将整个图像的 Alpha 透明度设置为 0 var ctx this data getContext 2d
  • 加载 ini 文件时发生致命异常

    我的项目文件夹是 demo 其中有文件夹 application library 和 public 在应用程序文件夹中 我有一个名为 configs 的文件夹 其中有一个文件 application ini 其中包含我的数据库参数 因此 在
  • C# datagridview 列转入数组

    我正在用 C 构建一个程序 并在其中包含一个 datagridview 组件 datagridview 有固定数量的列 2 我想将其保存到两个单独的数组中 但行数确实发生了变化 我怎么能这样做呢 假设一个名为 dataGridView1 的
  • 具有适当后退按钮支持的 jQuery Lightbox

    在进行了一些可用性测试后 我发现参与者打开了jQuery 灯箱 http leandrovieira com projects jquery lightbox 查看更大的图像 然后 他们只需点击浏览器后退按钮 而不是单击 关闭 按钮 这会将
  • Symfony 4.1 组件 - 依赖注入问题

    我正在用 PHP 重构旧应用程序 我正在尝试使用 Symfony 依赖注入组件将服务注入控制器 或其他服务 但我不知道如何实现这一点 因为 symphony 文档比框架组件更适合使用框架 我已经有了自己的内核 包含所有服务和控制器的容器 控