问题标签 [symfony-dependency-injection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
38 浏览

symfony - Symfony 的依赖注入模块,ServiceDefinitions 在使用扩展时没有加载

根据示例,我正在做正确的事情。

但是,定义是空的。

这些是我的设置:

这是扩展文件的一部分

PHP 致命错误:未捕获的异常 'Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException' 带有消息“您已请求不存在的服务“integration_layer_client”。在 XXX\Proyectos\GRV\Repos\grv-core\vendor\symfony\dependency-injection\ContainerBuilder.php:1022

0 投票
1 回答
266 浏览

composer-php - 解决依赖冲突安装 Behat 和 Laravel 5.3

您好,我正在尝试通过 composer 安装 behat/behat,但是我遇到了依赖问题。我尝试了以下许多:

但是,上面的输出是

下面是我的 composer.json 文件。

我应该安装 behat 和 symfony/dependency-injection 的哪种组合?我尝试了许多版本,曾经发出以下命令 composer info behat/behat -a 但仍然无济于事。

0 投票
1 回答
251 浏览

symfony - 动态延迟加载服务

在观看了 Laravel Nova 演示后,我想在我自己的应用程序中创建与 Lenses 类似的功能。

我有以下概念:

  • 实体:标准主义实体
  • 资源:描述资源的类,包括目标实体和可用镜头。
  • Lens:有一个方法apply(Request $request, QueryBuilder $qb)可以让你修改QueryBuilder基于Request.

目标是将所有内容定义Lenses为服务,然后以某种方式将它们分配给Resource. 这是我试图解决的问题。

尝试1:直接注入Lenses资源

项目资源.php

这样做的缺点是每个Lens服务都是实例化的,需要手动定义

尝试 2:注入标记Lenses到资源中

在我的services.yaml标签中,服务并将它们作为参数分配给资源:

项目资源.php

这种方法的缺点是每个Lens服务和资源都必须被标记并且不能是自动配置的服务。

**尝试 3:添加编译器通道 **

我试图将该process()方法添加到,Kernel但我并没有走得太远。


我的目标是以某种方式定义服务列表Resource并将它们注入。这有什么既定的模式吗?

0 投票
1 回答
331 浏览

symfony - Symfony 编译带注释的类

我对Symfony\Component\HttpKernel\DependencyInjection\Extension::getAnnotatedClassesToCompile()方法很感兴趣。如果我理解正确,您可以addAnnotatedClassesToCompile()使用一组类(使用注释)命名空间。然后在缓存预热期间,所有这些类注释都会被预热。我是对的还是缺少了什么?

如果它是正确的,那么为什么 symfony 将Symfony\Bundle\FrameworkBundle\Controller\AbstractController,添加Symfony\Bundle\FrameworkBundle\Controller\Controller到带注释的类中?我在里面找不到任何注释...

0 投票
1 回答
476 浏览

php - 循环子类时如何使用自动装配?

我有一个 Sumfony 4.3 命令,它处理一些数据并循环通过多个“处理器”来进行处理。该代码使用工厂(自动装配),然后实例化命令。

但是我仍然必须:

  • 自动装配 Factory 和 Processor 顶级类中的所有参数
  • 以正确的顺序将所有参数传递给处理器

我有大约 70 个处理器子类。它们都使用EntityInterface,但只有几个使用SwiftMailer和其他依赖项。

由于我正在添加仅供少数处理器使用的服务,因此我正在寻找一种仅在处理器级别自动装配这些参数的方法。理想情况下,也不向 services.yml 添加服务定义

总之,我希望能够向 的任何子类添加依赖项Processor,即使它是其他子类的父类并且自动注入依赖项。

0 投票
1 回答
7772 浏览

php - Symfony DI:未捕获的 ArgumentCountError:函数 App::__construct() 的参数太少,第 28 行的 index.php 中传递了 0,而预期的正是 1

我正在尝试实现 Symfonys 依赖注入容器。

我设置了 2 个容器,一个用于数据库,一个用于系统用户。

而且我正在使用addArgument()AppSystemUser类,将对象推送到类,并将对象App推送到类。SystemUserSystemUserDatabase

索引.php:

应用程序.php:

我确实看到了带有对象的 var_dump 结果,但不断收到此错误:

PHP 致命错误:未捕获的 ArgumentCountError:函数 TestingDI\App::__construct() 的参数太少,在第 28 行的 /www/potato/symfony-di/index.php 中传递了 0,而 /www/potato/symfony 中预期的正是 1 -di/testingdi/App.php:12

堆栈跟踪:

0 /www/potato/symfony-di/index.php(28): 测试DI\App->__construct()

1 {main} 在第 12 行的 /www/potato/symfony-di/testingdi/App.php 中抛出

这些是我的其他课程:

系统用户.php

数据库.php

0 投票
1 回答
2330 浏览

php - 未捕获的错误:找不到类“Symfony\Component\Config\Resource\ClassExistenceResource”

我添加了 Symfony 依赖注入容器(composer require symfony/dependency-injection): https ://symfony.com/doc/current/components/dependency_injection.html

运行:composer dump-autoload -o以重组类(/www/vendor/composer/autoload_classmap.php通过composer安装新库后文件为空)。

在我的init.php文件中运行它:

和休息compile()

我错过了什么?

找不到任何线索来解决此问题。

我究竟做错了什么?

作曲家.json

0 投票
0 回答
2178 浏览

symfony - 尝试将记录器绑定到 Symfony 3.4 中的自动装配控制器构造函数时出现未使用的绑定错误

从 2.8 升级到 Symfony 3.4 后,我试图摆脱有关使用容器服务的警告。一个挂断是我的控制器都从一个需要访问独白记录器的抽象控制器扩展而来。我决定为我的控制器使用 autwiring,并在基本控制器中添加了一个构造函数,它具有 aLoggerInterface $logger作为唯一参数。为了尝试配置一次,我添加了 $logger 变量,并在 services.yml 的绑定部分下添加了对记录器服务的引用。

但是,我不断收到错误消息: Unused binding "$logger" in service "security.authentication.failure_handler.secured_area.form_login"

我相信只有当没有服务具有具有该变量名的构造函数参数时,才会出现此错误。现在我知道我的控制器在抽象类中都有这个,并且是我其他一些服务的一部分,所以这似乎是错误的。我怎样才能摆脱这个错误?

这是我的 services.yml 的样子:

更新 1:

我注意到在security.authentication.failure_handler我提到了我的一项服务:app.service.security. 我忘了在下面声明,所以我在 services.yml 中添加了以下内容:

这摆脱了记录器错误,但是现在我看到有关 $env 字符串变量的错误:

Unused binding "$env" in service "security.authentication.failure_handler.secured_area.form_login".

我担心错误消息不是真正的错误,这是一个红鲱鱼。绑定选项似乎有点不稳定。任何建议表示赞赏...

更新 2:

我决定摆脱 bind 和 instanceof 配置并手动设置值,但现在这是错误:Cannot autowire service "app.service.security": argument "$sysInfoService" of method "AppBundle\Service\SecurityService::__construct()" references class "AppBundle\Service\SystemInfoService" but no such service exists. You should maybe alias this class to the existing "app.service.system_info" service.

奇怪的是,我相信我正在做错误建议做的事情;我为所谓的自动装配服务添加了别名:

我确实有一些我手动声明的服务,autowired: false以便手动设置参数。我认为应该没问题;您应该能够在服务容器中同时存在自动布线和手动布线,对吗?

0 投票
2 回答
2997 浏览

php - 从可迭代的注入标记服务中通过类名获取服务

我正在努力通过注入的标记服务组中的类名获取特定服务。

这是一个示例:我将所有实现为的服务标记DriverInterfaceapp.driver并将其绑定到$drivers变量。

在其他一些服务中,我需要获取所有那些被标记app.driver和实例化的驱动程序,并且只使用其中的几个。但是需要什么驱动程序是动态的。

服务.yml

其他一些服务:

因此,实现的服务作为可迭代结果DriverInterface注入到参数中。$this->drivers我只能foreach通过它们,但随后所有服务都将被实例化。

是否有其他方法可以注入这些服务以通过类名从它们那里获取特定服务而不实例化其他服务?

我知道有可能将这些驱动程序公开并使用容器,但如果可以通过其他方式进行,我想避免将容器注入服务。

0 投票
0 回答
354 浏览

symfony - Symfony DI 组件 - 如何使某些服务公开并可通过接口类名访问

在代码库的一小部分中使用 DI 作为独立组件我想让一些服务在这部分之外可见,并且可以通过接口类名访问。

据我所知,我应该为此使用容器。因此,当代码的旧部分(不能使用 DI)想要使用服务时,该实现由这部分代码配置:它应该调用$container->get(MyInterface:class).

问题是我收到:

我不能在代码的其他部分使用 DI。所以我想公开我的一些服务。这是我的代码:

服务.yaml:

生成器:

在获得定义时,我收到:

Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException: You have requested a non-existent service "App\MyInterface"

我怎样才能使它起作用?或者也许有更好的方法通过这两个模块使用一项服务?