问题标签 [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 投票
1 回答
612 浏览

php - 没有 PSR-4 的旧控制器的 Symfony 自动装配

我有一个旧版应用程序,我正在使用 Symfony。到目前为止一切正常。

现在我想为我的 Legacy-Controllers 使用自动装配。

  • 它们是使用作曲家classmap功能加载的
  • 位于根命名空间中(例如\Controller_Page
  • 类名与文件名不同

是的。我知道这很糟糕。但它是遗留问题,我现在不想触及每一个控制器(该应用程序中存在更大的问题)。

我想使用依赖注入和自动装配来减少(可怕的)混乱。

以下是我已经尝试过的一些方法:

命名空间不是有效的 PSR-4 前缀

命名空间前缀必须以“\”结尾

(我\BaseController的只有Symfony\Component\HttpFoundation\RequestStackas__construct参数)

控制器“BaseController”具有必需的构造函数参数,并且在容器中不存在。你忘了定义这样的服务吗?

无法加载资源“4208ad7faaf7d383f981bd32e92c4f2f”。

我不知道如何做到这一点。谢谢你的帮助。

编辑 1

又进了一步。我为其中一个传统控制器完成了自动配置,如下所示:

所以看来我以前的问题是由 yaml 配置或 smth 引起的,而不是由容器本身引起的。

现在我必须找到一种方法来注册我所有的 Legacy-Controllers。如果我找到一个好的解决方案,我会玩一下并更新。(好的解决方案非常受欢迎)

编辑2

好吧,这不是 YAML 配置。如果我使用 PHP-Configuration 我会遇到同样的问题。

命名空间不是有效的 PSR-4 前缀。

我现在将尝试手动注册课程。

0 投票
1 回答
586 浏览

php - Symfony 4自动装配参数不起作用

我正在尝试将其自动连接UrlGeneratorInterface到 DTO 以在我的 DTO 中使用 generate 方法,

我的 DTO 中有这个:

和我的 service.yaml:

但是返回的错误是:

0 投票
1 回答
159 浏览

php - 如何使用类常量作为绑定参数服务的标签?

我在我的配置中标记了一组实现相同接口的服务:

(其中的值为 App\SomeInterface::TAGvery_unique_identifier

我想重用这个值来绑定这个参数,如下所示:

但是当我这样做时,我得到一个空的RewindableGenerator.

相反,我可以这样做,使用常量的文字值:

...并且它按预期工作,并且RewindableGenerator内部具有所有必要的服务。

如何在两个地方都使用 PHP 常量,这样我就不必在不同的地方重复值?显然,这不是什么大不了的事,但如果可能的话,我想避免它。

0 投票
0 回答
86 浏览

php - 从 symfony 3.3 升级到 symfony 3.4 后出现服务错误

几个月前我已经将我的 symfony projet 版本从 3.3 升级到 3.4,一切都醒了,但我最近尝试添加一个事件监听器,然后我得到了那个错误

显然没有什么我从这里编辑了默认的 service.yml 文件

对此(因为在 symfony 3.4 或 4 中,所有服务默认都是私有的)

但是当我尝试运行服务器时,我现在遇到了这个错误

而且我现在不知道如何解决它,那个 template.loder.wrapped 服务在哪里。

0 投票
1 回答
133 浏览

php - 无法从容器中获取 IriConverter,因为它不是公开的

我试图加载api_platform.iri_converter但得到一个错误:

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

这是代码:

0 投票
0 回答
18 浏览

php - 如何动态处理带有容器服务/参数的路由器?

我在我的非 Symfony 项目中使用了 Symfony 路由包和 DI 包。我通过以下代码向控制器/操作注入依赖项:

我的问题是代码只找到参数的名称而不是类。我的问题是我应该如何根据类类型将创建的参数连接到容器中的注册服务?另一个问题是我如何才能意识到参数是否与容器的参数(这是一个类对象)匹配?

0 投票
0 回答
225 浏览

php - Symfony 依赖注入器和建立学说

我有一个项目使用少量 Symfony 组件,包括依赖注入。主要用于小型命令行项目。昨天,我进行了重构以使用依赖注入,现在我正在尝试重构并将 Doctrine 纳入其中。

在添加 DI 之前,我有一个引导文件,用于设置原则并在连接中传递 EntityManager。这不是一个好主意;你可以看到我为什么要重构。

那么,如何建立与 DI 的 Doctrine 连接?起初我以为自动接线会自动处理它。这就是我到目前为止所拥有的。在底部,我将添加一些我尝试过但没有成功但得到不同错误消息的东西。

作曲家.json:

安全.yml:

索引.php:

当我将 EntityManagerInterface 添加到其中一个命令时,出现错误:

错误信息:

我知道我需要在某个地方引入 Entity Manager 和 Doctrine 工厂,但我不知道怎么做。

在添加 DI 之前,我有一个引导文件,可以像这样设置连接,然后我传递了 $entityManager 变量:

我看到有些人在服务中作为工厂建立了联系?但是,我似乎无法再次找到文档。

与工厂合作

我添加了一个返回 EntityManager 连接的 DatabaseFactory。

这现在有效,但我想知道这是否是最好的方法,是否有一个学说工厂我可以调用并传递连接参数?

0 投票
2 回答
101 浏览

php - 在 Symfony4 中使用 Symfony2 服务定义,同一个类有多个服务

我在 Symfony2 中有以下服务定义

现在我计划升级到 Symnfony4,我需要将类路径作为服务名称

这里的问题是它具有相同的名称,因为我们使用相同的类路径?我该如何解决?我可以使用具有不同参数的别名吗?

0 投票
0 回答
79 浏览

php-7 - PHP Symfony 命令和代码组织

我正在使用控制台命令 Symfony 进行 http 调用。

快速示例工作:

为了更好地组织我的代码,我想在其他类中外部化 callFoo(和 callBar、callAnother..)方法,该方法将从 CallApiService 继承。喜欢 :

但我不明白如何通过依赖注入来避免重新声明构造函数

0 投票
0 回答
101 浏览

symfony - 有没有办法用 Console 参数覆盖 Symfony 容器值?

tl;dr:我有一个 Symfony 服务配置,它将默认字符串值绑定到命名参数,我想在控制台进程中使用命令行选项值覆盖它。

我正在开发一个 Composer 库(php-tuf/composer-stager),它为类提供公共接口和一个为它们提供 shell 接口的 Symfony 控制台应用程序。对于代码 API,我想将默认(字符串)值绑定到一些服务参数,以便客户端不必在每次调用我的域服务时都包含参数,但他们仍然可以在自己的服务配置中覆盖默认值。

但是在我自己的控制台应用程序中,我希望能够根据用户可能提供的命令行选项覆盖这些默认值。例如,我希望有一个$string默认值lorem,但我希望我的控制台使用一个选项覆盖默认值,例如--string=ipsum. 但是当控制台应用程序处理用户输入时,我找不到任何地方来更改容器中参数的值。这是一个简化的代码示例:

有任何想法吗?

您可以在https://github.com/php-tuf/composer-stager/tree/v0.1.0查看我当前的代码库。

注意:我的应用程序此时需要支持 Symfony 4 和 5。