当前位置: 首页 > 知识库问答 >
问题:

Symfony:如何在Bundle Controller中调用私有服务

明宜年
2023-03-14

我创建了一个捆绑包,我想用它的最佳实践。

所以我所有的服务都是私人的

https://symfony.com/doc/current/service_container/alias_private.html

https://symfony.com/blog/new-in-symfony-3-4-services-are-private-by-default

在Symfony core中,我们已经做到了这一点,我们将所有服务和别名都设为私有,除了一些选定的服务和别名,这些服务和别名在引导时是必需的。事实上,无融资创业是直接使用容器的最后也是唯一合法的用例。

那么,我们应该放弃将service_container完全与ContainerAware*一起注入的可能性吗?这是社区在准备第五交响曲时可能考虑的一种可能性。

我有一个应用程序/控制器必须使用的特性或抽象控制器。trait可以通过自动连接调用私有服务,问题已经解决,但是Symfony的最佳实践是不要只在Bundle中使用自动连接:

https://symfony.com/doc/current/service_container/autowiring.html

公共和可重用捆绑包»

公共捆绑包应该明确配置其服务,而不是依赖于自动连接。

那么,如何将我的私有服务注入我的Trait或抽象控制器。甚至在App controller中,用户无需配置are services.html" target="_blank">yml。

我希望我明白了。

对不起我的英语。我试图改进它;-)

共有1个答案

秦宁
2023-03-14

如果您正在开发一个第三方包,即一个将由其他人使用的包,那么您必须手动并用xml定义您的服务。这些是最佳做法。

现在,第三方捆绑包可以有公共服务。您引用的文章指的是AppBundle服务,它应该是私有的,因为它包含您的应用程序/业务逻辑。默认情况下它们是私有的原因是因为您应该使用构造函数依赖注入来使用它们,所以事情更容易测试

routing.xml

入口ction.php

 类似资料:
  • 我正在尝试将我的Symfony 3.4应用程序迁移到Symfony 4.1。 测试不起作用,因为服务默认是私有的(这是一个好消息)。 以下这篇文章:https://symfony.com/blog/new-in-symfony-4-1-simpler-service-testing,我仍然面临私人服务的问题: Symfony\Component\DependencyInjection\Except

  • 问题内容: 我需要将两个对象注入。其中一个是的实例,我得到这样的信息: 那么如何在我的services.yml中声明呢?这是服务: 问题答案: 我找到了此链接,这对我有用:

  • 我正在尝试将一些细枝视图作为定制邮件服务的模板注入,这将被另一个服务用作依赖项。 我不明白为什么,但好像Symfony没有看到我试图在$parameters中注入的参数。 将此服务数组作为参数注入的正确方法是什么? 以下是services.yaml部分: RestMailer服务构造函数: 以下是返回的错误: 在DefinitionErrorExceptionPass.php第54行中: 无法自动

  • 我是一个初学程序员,我已经试着解决这个问题几天了,我不知道还能做什么。你能帮我吗?

  • 我想实例化OrderAbstraction服务,它需要在测试用例的构造函数中使用实体管理器。 我尝试自动连接OrderAbstractionTest,并将OrderAbstraction和实体管理器作为参数。 my service.yaml,autowire设置为true 我一直收到这样的东西: PHP致命错误:Uncaught ArgumentCounter错误:函数App\Test\Order

  • 问题内容: 我的角度应用程序中有一个服务,看起来像这样: 我不仅要对return语句中公开的功能/属性进行单元测试,还要对return语句之外的功能进行单元测试。 我的测试当前设置如下: 但是,如何测试return语句未公开的compare,filter和createBrackets函数? 谢谢! 问题答案: 无法测试这些功能。它们的范围是构成BracketService工厂的函数,在其他任何地方